簡體   English   中英

Xpath / xQuery的月份差異

[英]Xpath/xQuery difference in months

我正在嘗試獲取xPath幾個月內兩個日期之間的差異。

幾天之內我就沒問題了(1127)

days-from-duration(xs:date('2012-06-17')-xs:date('2009-05-17'))  

當我嘗試在幾個月內完成操作時,我得到0

 months-from-duration(xs:date('2012-06-17')-xs:date('2009-05-17')) 

我確實注意到這只是幾天而已(“ P1126D”),因此問題可能就是不確定如何解決。

 xs:date('2012-06-17')-xs:date('2009-05-17')

謝謝你的幫助!

因此,我似乎可以做的最好的事情就是手動計算它。

(year-from-date(xs:date('2012-06-17')) - year-from-date(xs:date('2012-05-18')))*12 + month-from-date(xs:date('2012-06-17')) -month-from-date(xs:date('2012-05-18')) + (if (day-from-date(xs:date('2012-06-17'))  < day-from-date(xs:date('2012-05-18')) ) then -1 else 0)

問題是, days-from-duration days數返回days -而不是持續時間包括的天數。 同樣的幾個月和幾年。

現在,您可以按天划分,但不能按月划分(因為月份邊界不均勻):

(: arg1 here is a dayTimeDuration, which can't be easily converted to a yearMonthDuration :)
let $arg1 := xs:date('2012-06-17')-xs:date('2009-05-17')
return xs:dayTimeDuration($arg1) div xs:dayTimeDuration("P30D")

此功能未包含在規范中,因為我們無法達成共識。 我們聽到有人爭辯說,2015年3月31日與2015年9月30日之間的時間差是6個月,而有人爭辯說是5個月。 (建議:負差異似乎要比正差異更成問題。)您可以輕松地發現,日期加上6個月減去6個月並不是您開始的日期。 您必須定義您認為答案應該是什么,並使用較低級別的工具(例如,月初日期和年初日期)來實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM