2012-10-01 9 views
0

현재 사용자가 필드에 특정 날짜를 입력하는 양식의 InfoPath에서 작업하고 있습니다.InfoPath (XPath) 일 남은 시간

다음으로 일년 중 남은 기간을 계산하는 공식을 원합니다. 나는 또한 매일 비용을 치르고 싶다. 매일 2 달러의 비용을 받고 입력 한 날짜는 12 월 29 일이라고 가정합니다. 나는 그 함수가 반환 할 "가격 : 4 $"

답변

1

의 XPath 2.0 날짜/시간 함수의 엄청 많이 있습니다

2012 년의 마지막 날, 당신이 할 수있는 현재 날짜 사이의 일을 얻으려면을 사용 : 당신은 사용자가 날짜를 inputed 경우

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

$user-date 당신이 $user-datecurrent-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 - 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 

당신이 몇 가지 모듈로 계산을 할 수있는 윤년 감지하기 :

윤년의 경우는 366을 사용하여 월 이후 매달 1을 추가 모든 윤년의 : 올해는 범위의 윤년 인 경우

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

관련 문제