2014-12-20 6 views
1

JavaScript에서 ISO 8601 기간을 비교하여 어느 기간이 다른 기간보다 더 긴지 확인하려고합니다. 예 : P6M (6 개월)이 PT10M (10 분)보다 큽니다.자바 스크립트에서 ISO 8601 기간 비교

도움이되는 항목을 찾을 수 없으므로 아마도이 문제를 해결할 수 있습니다.

+0

이 꽤 쉽게 개월 동안 주 이하의 단위로 기간을 비교하지만, 문제가있어,주의하십시오. 월 및 연도 기간을 값으로 변환하는 방법에 대한 합의가 필요합니다 (예 : 1 년 6 개월은 181 일 또는 182 일, 두 번째 6 개월은 184 일이됩니다. P0.5Y == P6M은 항상 그렇습니까? P0.5M == P2W입니까? P1M == P4W입니까? 또는 P30D? – RobG

답변

0

이 기본 자바 스크립트 Date 객체를 사용하여 사용할 수 아무것도 OOTB은 없습니다하지만 Moment.js는 (... 그리고 약간의 포인트는 여기에 바퀴를 다시 발명있다)

예를 잘 당신의 ISO8601 지속 시간을 처리 다음 demo 인쇄 : "6 months is greater than 10 minutes"

var d1 = moment.duration('P6M'), 
    d2 = moment.duration('PT10M'); 

console.log(
    d1.humanize() 
    + (d1 < d2 ? ' is less than ' : ' is greater than ') 
    + d2.humanize() 
); 
+0

아마도 P1Y와 P12M이 주어지면 "1 년은 1 년"과 같지만 P1M과 P4W는 "1 개월이 1 개월과 같지 않습니다"라고 표시됩니다. P4W를 "1 개월"또는 "4 주"로 변환해야합니까? 기간은 까다 롭습니다. ISO 8601 기간을 초 단위로 변환하면 약 10 줄의 코드가됩니다. 하지만 1 년 동안 몇 초가 걸렸습니까? 1 개월? – RobG

+0

정확하게 이해하면 특정 기간 (ISO 날짜)없이 ISO 기간을 비교할 수 없습니다. 왜냐하면 기간은 해당 날짜에 달려 있기 때문입니다. P116은 2 월 1 일부터 2016 년에 비해 2 월 1 일에 시작되는 86400 초가 더 짧아집니다. 2016 년이 윤년이므로 추가 날이 있기 때문입니다. 또한 DST, 달력 시스템의 구멍 및 초를 고려해야 할 수도 있습니다. – CoDEmanX

관련 문제