我需要使用JavaScript或Java将ISO-8601持续时间转换为日期。
例如,像P0000-00-60T00:00:00
这样的ISO-8601和像2014-11-30
这样的当前日期意味着,我想得到像2015-01-29
答案 0 :(得分:2)
在ECMAScript中,解析ISO 8601日期,如" 2014-11-30"很直接。执行此操作的功能还应验证日期并返回NaN(如果它无效:
)function parseYMD(s) {
var b = s.split(/\D/);
var d = new Date(b[0], --b[1], b[2]);
return d && d.getFullYear() == b[0] && d.getDate() == b[2]? d : NaN;
}
您可以应用类似的逻辑来解析句点并将其添加到日期:
// Period in extended format: Py-m-dTh:m:s
// Modifies the date passed in and returns it
function addPeriod(p, d) {
d = d || new Date();
var b = p.match(/\d+/g);
d.setFullYear(d.getFullYear() + +(b[0]), d.getMonth() + +(b[1]), d.getDate() + +(b[2]));
d.setHours(d.getHours() + +(b[3]), d.getMinutes() + +(b[4]), d.getMinutes() + +(b[5]))
return d;
}
以上内容还应验证该期间的部分不会超过其模量,例如:月份不能超过12小时,超过24小时,超过59小时等等。
// Parse string to date
var date = parseYMD('2014-11-21');
console.log(date);
// Add a period to a date
addPeriod('P1-0-0T10:10:10', date);
console.log(date);