2011-09-14 22 views
1

は、次の形式で日付を受け取る:XSL日時差分計算(XSLT 1.0)

20111129060804 

をし、私はそれらの両者の違いを計算することができるようにする必要があります。しかし、の拡張子は使用できません。

私も同様に他の制限があります。

  • 私は
  • 、XSLTの内部で使用される名前空間へと制限されていますし、どこ私は、XSLスタイルシート(サードパーティのアプリケーション)を使用しています は、xsl内のinclude/importアクションを適切に処理しません。

したがって、私が使用する必要がある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 

(すなわち0.168854166666280 * 24 = 4.0524999999990680、または4時間と時間の0.0525パーセント、または3.15分)。

エクステンションを使わずにこのタイプの経過時間計算をXSLT 1.0で行ったことがありますか?

再利用できる既存のコードセットがあれば、ご意見、ご提案、または参考になりますようお願い申し上げます。

EDIT -

私は上記を進めることを決めた、とTIMEの変換に暗礁に乗り上げるています。

私が使用している例がある:午前七時38分56秒の期間/差です 開始時間=午前8時19分37秒 終了時間=午前15時58分33秒

は(ところで、これはありますEndtime < Start TimeまたはDay> 0の場合は、エラーをスローする必要があります。

時間に到着するには、すべてを秒に変換します&次に計算します。 08:19:37は29977に変換されます(8 * 3600時間+ 19 * 60分+秒)。 15:58:33は57513に変換されます(15 * 3600時間+ 58 * 60分+秒)。

差は27536秒です。

私が取得: 3600分の27536 = 7.6488888888888888888 <から25200 = 2336 < - - 25200 = 7時間* 3600秒 60分の2336 = 38.93333333333333333 <整数部分は、27536の違い時間 です - - 整数部は3835分 で、次に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')"/> 

形式番号が間違って私の時間を作り、その中に「08」を持って、今起きたら、上記の変数qが、しかしT-時間-差分を(正しい)7.648888888888888888 を持っています。

数値の整数部分を取得するための他の書式設定の試みが、丸めにつながることは知っています。 (私はと思う)私は次の計算に使用する前に、数に結果を変換する必要がありますになるだろう - - &サブ-前サブ-後の外

はに他の方法があります番号&の変更されていない整数部分を取得して、文字列から数字に変換する必要はありません。

答えて

1

floor()を使用して値を切り捨ててみてください。

floor(7.64)= 7