2009-09-03 9 views
2

J'ai une question à propos de XSLT.Exclure les articles qui ont une date ultérieure à la date d'aujourd'hui

Sur un site Web j'ai un calendrier simple, montrant des événements qui se passent dans le futur. Mais quand un événement est terminé, il doit être supprimé de ma liste. Par fait je veux dire, que la date de l'événement est passé la date d'aujourd'hui.

Chaque événement a une date attachée.

Regardez le code folowing:

<xsl:for-each select="$currentPage//node[@template='1238']"> 

    <xsl:sort data-type="text" select="./data[@alias='dato']" order="ascending"/> 

    <div class="aktivitet_forside"> 
      ...MY EVENT CONTENT...      
    </div> 

</xsl:for-each> 

Le code ci-dessus me montrer tous les événements avec un template = '1238' et qui est aussi correct, parce que c'est le modèle de mes événements.

Mais comme je l'ai mentionné avant chaque événement ont un champ contenant une date. Le champ s'appelle "dato". C'est également le numéro que je trie les événements après, de sorte que l'événement dont la date est la plus proche d'aujourd'hui sera affiché en haut de la liste.

Le format du « dato » -field est: 2009-08-30T08: 59: 00

Comment puis-je supprimer automatiquement un événement où la valeur de la -field « date » est passé la date de aujourd'hui? Donc, si la date d'aujourd'hui est le: 3 septembre 2009, un événement qui a une date du 30 août 2009 ne devrait pas figurer sur la liste.

+0

Toute personne ? Si je peux obtenir la date d'aujourd'hui cela vous aiderait-il? –

+0

Malheureusement, la meilleure réponse à cette question dépend du processeur XSLT que vous utilisez. –

Répondre

2

En supposant que vous utilisez XSLT 1.0, Si votre processeur XSLT prend en charge les extensions EXSLT, vous pouvez utiliser la fonction date: différence. Il existe également un modèle XSLT simple que vous pouvez adapter à votre scénario au cas où vous ne disposez pas d'EXSLT nativement.

http://www.exslt.org/date/functions/difference/index.html

EDIT:

Il pourrait y avoir une autre version plus simple où vous convertissez votre date temps-chaîne pour devenir un numéro ayant le format YYYYMMDDHHMMSS. Ceci sera ordonné automatiquement par ordre croissant numériquement (les dates/heures futures auront un plus grand nombre que les dates précédentes), vous pourrez alors prendre la chaîne date-heure du jour de la même manière et faire une différence numérique régulière pour voir si le jour est après ou avant la date actuelle.

<xsl:variable name="newFormat" select="translate('2009-08-30T08:59:00', '-T:', '')"/> 

Gives 20090830085900 

Dans votre XPath, vous pouvez faire cela, en supposant $ currDateTime est mis à la bonne valeur traduit et le noeud <data> a la date de vérifier, vous pouvez utiliser le ci-dessous ..

<xsl:for-each select="$currentPage//node[@template='1238'][data[@alias='dato' and ((number(translate(. ,'-T:', '')) - number($now)) &gt;=0)]]"> 
+0

Qu'est-ce que c'est EXSLT? Je ne pense pas que je l'ai disponible. N'y at-il pas un moyen de le faire sans elle? –

+0

Bien qu'il soit un peu long d'écrire une fonction de différence de date par vous-même (Vous devez comprendre les années bissextiles, nombre de jours, etc.) - ce lien que j'ai fourni a un modèle XSLT normal que vous pouvez inclure dans votre feuille de style, vous pouvez jeter un coup d'oeil et l'adapter à votre problème. – Thiyagaraj

+0

Mise à jour d'une solution plus simple - Mais cela suppose que vous pouvez obtenir la date-heure actuelle dans votre feuille de style XSLT, que ce soit dans le document d'entrée ou autrement. – Thiyagaraj

Questions connexes