2012-10-01 70 views
0

我目前正在InfoPath中的一個表單中用戶在字段中輸入特定日期。今年剩餘的InfoPath(XPath)天

然後我想要一個公式來計算一年剩餘的天數。我也想每天都看重成本。假設每天花費2美元,並且輸入的日期是12月29日。然後,我希望函數返回「價格:$ 4」

回答

1

XPath 2.0中有非常多的日期/時間功能:

爲了獲得2012年的最後一天和當天,你可以之間的天使用方法:

days-from-duration(date("2012-12-31") - current-date()) 

如果你有一個用戶inputed日期$user-date你需要與$user-date取代current-date(),構建了去年12月日的日期對象在這一年,你可以這樣做:

days-from-duration(date(concat(year-from-date($user-date), "-12-31")) - $user-date) 

(或使用date($user-date),如果$user-date是一個字符串)

而得到最終的價格列使用:

concat("price: ", 2 * days-from-duration(date(concat(year-from-date($user-date), "-12-31")) - $user-date), "$") 

的XPath 1.0:

沒有日期的功能,你需要用手做所有這些愚蠢的計算。

您需要一張映射從每個月到每年年底的日期的映射。那麼你可以做Map[$month] - $day。 (或者使用地圖將月份數據映射到年初到年初,然後從365中減去,我做了什麼,因爲我已經在那張地圖上了)

現在XPath 1.0沒有地圖,但是你可以模擬一個是字符串:

365 - substring-before(substring-after("1:00, 2:31, 3:59, 4:90, 5:120, 6:151, 7:181, 8:212, 9:243, 10:273, 11:304, 12:334, 13:365", concat($month, ":")), ",") - $day 

這適用於每一個非閏年。

對於一個閏年,你只需要使用366和2月以後加1,每個月:

366 - substring-before(substring-after("1:00, 2:31, 3:60, 4:91, 5:121, 6:152, 7:182, 8:213, 9:244, 10:274, 11:305, 12:335, 13:366", concat($month, ":")), ",") - $day 

要檢測閏年,你可以做一些模數計算,它可能是更容易只使用一個地圖所有閏年:

concat("0", substring-before(substring-after("...,2000:1,2004:1,2008:1,2012:1,2016:1,...", concat($year, ":")), ",")) * 1 

如果年份的範圍是閏年這個返回1

然後把它放在一起:

(365 - substring-before(substring-after("1:00, 2:31, 3:59, 4:90, 5:120, 6:151, 7:181, 8:212, 9:243, 10:273, 11:304, 12:334, 13:365", concat($month, ":")), ",") - $day) * (1 - concat("0", substring-before(substring-after("...,2000:1,2004:1,2008:1,2012:1,2016:1,...", concat($year, ":")), ",")) * 1)  +  (366 - substring-before(substring-after("1:00, 2:31, 3:60, 4:91, 5:121, 6:152, 7:182, 8:213, 9:244, 10:274, 11:305, 12:335, 13:366", concat($month, ":")), ",") - $day) * concat("0", substring-before(substring-after("...,2000:1,2004:1,2008:1,2012:1,2016:1,...", concat($year, ":")), ",")) 
+0

我不認爲IP2010使用XPath 2.0。只有1.0。 – ktharsis

+0

那麼他應該更好地切換到支持xpath2的程序。在XPath 1.0中這樣做看起來很糟糕。 – BeniBela

+0

我改變了標題以更好地反映問題。可能要考慮更新/刪除您的答案以反映它。同意1.0是一團糟,但這是問題所要求的。 – ktharsis