2017-06-16 101 views
0

我花了將近半天的時間來弄清楚,但無法實現。有人可以幫我解決嗎?XSLT 2.0 - 以年,月,日爲單位的歷史日期和今天之間的日期差異(YYMMDD格式)?

我期待在YYMMDD格式中獲得歷史日期和今天之間的日期差異,以年,月和日計算。

例如,如果歷史日期的格式爲2017-06-01-07:00,則期望值爲000016,因爲這是歷史日期和今天之間的日期差異。

同樣,如果歷史日期爲2016-07-27-07:00,則預期值爲001019,這意味着日期差異爲歷史日期以來的0年,10個月,19天。

+0

只是爲了確認輸入格式中的'-07:00'部分是什麼時區偏移? –

+0

這就是hh:mm,是的,這是從UTC時間開始的時區偏移 – user3836593

+0

您可以構建一個'xs :date'直接來自你的輸入格式,例如'xs:date('2017-06-01-07:00')',你也可以減去'current-date()div xs:date('2017-06-01 -07:00')'來獲得一個持續時間,但是這是一種不同的格式。 –

回答

1

首先,你應該知道,表達日期差異在幾年,幾個月和幾天是非常沒有意義的。

年數和月數沒有固定的天數,因此兩次計算的測量持續時間相等的計算時間可能很容易以年,月和日的形式返回不同的結果。

出於同樣的原因,沒有建立的算法來計算年,月和日的日期差異。

所有這一切說,如果你想顯示在年,月,日的經過時間 - 作爲一個例證,例如 - 你可以用下面的方法:

<xsl:template name="date-diff-in-ymd"> 
    <xsl:param name="start-date"/> 
    <xsl:param name="end-date"/> 

    <xsl:variable name="start-year" select="year-from-date($start-date)"/> 
    <xsl:variable name="start-month" select="month-from-date($start-date)"/> 
    <xsl:variable name="start-day" select="day-from-date($start-date)"/> 

    <xsl:variable name="end-year" select="year-from-date($end-date)"/> 
    <xsl:variable name="end-month" select="month-from-date($end-date)"/> 
    <xsl:variable name="end-day" select="day-from-date($end-date)"/> 

    <xsl:variable name="elapsed-months" select="12*($end-year - $start-year) + $end-month - $start-month - number($end-day lt $start-day)"/> 
    <xsl:variable name="birthday" select="$start-date + xs:yearMonthDuration(concat('P0Y', $elapsed-months, 'M'))"/> 

    <xsl:variable name="years" select="$elapsed-months idiv 12"/> 
    <xsl:variable name="months" select="$elapsed-months mod 12"/> 
    <xsl:variable name="days" select="days-from-duration($end-date - $birthday)"/> 

    <xsl:value-of select="concat($years, ' years, ', $months, ' months and ', $days, ' days')" /> 
</xsl:template> 

例的電話號碼:http://xsltransform.net/a9GiwM

0

您可以使用表達式$d2 - $d1將兩個日期$ d1和$ d2之間的差異作爲xs:dayTimeDuration獲取。結果是在幾天之內(你可以通過除以xs:yearMonthDuration('PT1D')將其轉換爲整數天數。將這個轉換爲幾年,幾個月和幾天直接可能不會給出令人滿意的結果:你想要什麼回答2016-02-29 and 2017-02-28?如果您知道一種算法可行,那麼在XSLT中表達它不應該太困難,但如果您需要編碼方面的幫助,則必須解釋算法。

相關問題