我目前正在InfoPath中的一個表單中用戶在字段中輸入特定日期。今年剩餘的InfoPath(XPath)天
然後我想要一個公式來計算一年剩餘的天數。我也想每天都看重成本。假設每天花費2美元,並且輸入的日期是12月29日。然後,我希望函數返回「價格:$ 4」
我目前正在InfoPath中的一個表單中用戶在字段中輸入特定日期。今年剩餘的InfoPath(XPath)天
然後我想要一個公式來計算一年剩餘的天數。我也想每天都看重成本。假設每天花費2美元,並且輸入的日期是12月29日。然後,我希望函數返回「價格:$ 4」
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, ":")), ","))
我不認爲IP2010使用XPath 2.0。只有1.0。 – ktharsis
那麼他應該更好地切換到支持xpath2的程序。在XPath 1.0中這樣做看起來很糟糕。 – BeniBela
我改變了標題以更好地反映問題。可能要考慮更新/刪除您的答案以反映它。同意1.0是一團糟,但這是問題所要求的。 – ktharsis