2009-09-03 18 views
2

XSLTに関する質問があります。今日の日付より後の日付のアイテムを除外

ウェブサイトには、今後予定されているイベントを示す簡単なカレンダーがあります。

しかし、イベントが完了したら、それを私のリストから削除する必要があります。私は、イベントの日付が今日の日付を過ぎていることを意味します。

すべてのイベントには日付が付けられています。 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> 

上記のコードは私に=「1238」テンプレートを使用して、すべてのイベントが表示されますし、それは私のイベントのテンプレートであるため、それは、また、正確です。

しかし、すべてのイベントの前に私が言及したように、日付を含むフィールドがあります。フィールドは "dato"と呼ばれます。これはあとでイベントをソートする番号なので、今日に最も近い日付のイベントがリストの先頭に表示されます。

「ダト」 - フィールドの形式は次のとおりです。2009-08-30T08:59:00

どのように私はautomaticaly「日付」 - フィールドの値がの日付を過ぎているイベントを削除するには今日?

今日の日付は2009年9月3日です。2009年8月30日の日付のイベントはリストに表示されません。

+0

誰でも使用することができます? 私は今日の日付を得ることができれば、それはあなたを助けるだろうか? –

+0

残念ながら、この質問に対する最良の答えは、使用しているXSLTプロセッサによって異なります。 –

答えて

2

XSLT 1.0を使用していると仮定して、XSLTプロセッサがEXSLT拡張機能をサポートしている場合は、date:difference関数を使用できます。 EXSLTがネイティブに利用できない場合に備えて、シナリオに適応できるプレーンなXSLTテンプレートもあります。

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

EDIT:

あなたは形式YYYYMMDDHHMMSSを持つ数になるためにあなたの日付時刻文字列に変換する別の簡単なバージョンがあるかもしれません。これは自動的に数値的に昇順に並べ替えられます(将来の日付/時刻は前の日付よりも大きな数字になります)。同様に現在の日付と時刻の文字列を取り、通常の数値の違いを使ってその日現在の日付以降です。

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

Gives 20090830085900 

、あなたは$ currDateTimeが右換算値に設定されており、<data>ノードがチェックする日付を持っていると仮定すると、これを行うことができ、あなたは以下の...

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

そのEXSLTとは何ですか?私はそれがあるとは思わない。 それなしでそれを行う方法はありませんか? –

+0

自分で日付差関数を書くのは少し時間がかかるでしょう(うるう年、日数などを計算しなければなりません)。私が提供したリンクには通常のXSLTテンプレートが含まれています。スタイルシートを見て、あなたの問題に適応させることができます。 – Thiyagaraj

+0

もっと簡単な解決策が更新されました。しかし、これは入力ドキュメントやその他の方法のいずれかでXSLTスタイルシートの現在の日付時刻を取得できると仮定しています。 – Thiyagaraj

関連する問題