XSLT 1.0を使用し、次の形式で日付を受け取ります。
20111129060804
そして、私はそれらの2つの間の差を計算できる必要があります。ただし、拡張機能は使用できません。
他にも制限があります。
- XSLT内で使用できる名前空間に制限があります。
- また、xslスタイルシート(サードパーティアプリケーション)を使用している場合、xsl内のインクルード/インポートアクションを適切に処理しません。
したがって、実際には、使用する必要のあるxsltは、呼び出されたり参照されたりするものはすべてxslt自体に含まれている必要があるという点で、ほぼ自己完結型である必要があります。
私は、日付と時刻を取得してジュリアンのシリアル番号に変換し、Excelと同じように日付の計算を処理することを考えていました。例 -
09/14/2011 08:19:37 = 40800.346956018500000
09/15/2011 12:22:46 = 40801.515810185200000
difference 1 day 4 hours 3 minutes and 9 seconds
difference = 1.168854166666280
ここで、小数点の左側はすべて日数で、小数点の右側はすべて時間どおりです(つまり、.168854166666280 * 24 = 4.0524999999990680、つまり4時間と.0525パーセントの時間、つまり3.15分)。
誰かが拡張機能を使用せずにXSLT1.0でこのタイプの経過日時の計算を行ったことがありますか?
再利用できる既存のコードセットがある場合は、考え、提案、または参照をいただければ幸いです。
編集 -
私は上記を続行することを決定し、TIMEの変換に問題が発生しました。
私が使用している例は次のとおりです。開始時間=08:19:37終了時間=15:58:33
これは7:38:56の期間/差です(ところで、これは当日の計算専用です-Endtime <Start Timeの場合、またはDayが> 0の場合、エラーをスローする必要があります)。
その時間に到達するために、私はすべてを秒に変換してから計算を行います。08:19:37は29977に変換されます(時間の場合は8 * 3600+分+秒の場合は19* 60)。15:58:33は57513に変換されます(15*3600時間+58* 60分+秒)。
差は27536秒です。
私は次のようになります:27536/3600 = 7.6488888888888888888 <-整数部分は時間であり、27536の差-25200 = 2336 <-25200=7時間*3600秒2336/60=38.93333333333333333<-整数部分は38分です次に、2336〜2280の差=上から56秒。
ただし、これらの数値の整数部分を取得しようとすると、丸めの対象になります。
<xsl:template name="time-difference">
<xsl:param name="from-hour"/>
<xsl:param name="from-minute"/>
<xsl:param name="from-second"/>
<xsl:param name="to-hour"/>
<xsl:param name="to-minute"/>
<xsl:param name="to-second"/>
<xsl:variable name="f-secs" select="($from-hour * 3600) + ($from-minute * 60) + ($from-second)"/>
<xsl:variable name="t-secs" select="($to-hour * 3600) + ($to-minute * 60) + ($to- second)"/>
<xsl:variable name="sec-diff" select="$t-secs - $f-secs"/>
<xsl:variable name="daysec-diff" select="format-number(($sec-diff div 86400),'#')"/>
<xsl:variable name="q" select="($sec-diff div 3600)"/>
<xsl:variable name="t-hrs-diff" select="format-number(($sec-diff div 3600),'00')"/>
上記の変数qには7.648888888888888888(これは正しい)がありますが、format-numberが発生した後のt-hrs-diffには「08」が含まれているため、時間が正しくありません。
数値の整数部分を取得しようとする他のフォーマットの試みは、丸めをもたらすことを私は知っています。
substring-beforeとsubstring-afterの外で-次の計算で使用する前に結果を数値に変換する必要があります-数値の変更されていない整数部分を取得する他の方法はありますか?ピースを使用するには、文字列から数値に変換する必要がありますか?