【发布时间】:2012-07-03 20:24:36
【问题描述】:
Google 日历向我抛出 rfc3339,但我所有的日期都是自 1970 年 1 月以来的毫秒数。
rfc3999:
2012-07-04T18:10:00.000+09:00
javascript 当前时间:(new Date()).getTime():
1341346502585
我更喜欢毫秒,因为我只处理倒计时而不是日期。
【问题讨论】:
标签: javascript datetime date
Google 日历向我抛出 rfc3339,但我所有的日期都是自 1970 年 1 月以来的毫秒数。
rfc3999:
2012-07-04T18:10:00.000+09:00
javascript 当前时间:(new Date()).getTime():
1341346502585
我更喜欢毫秒,因为我只处理倒计时而不是日期。
【问题讨论】:
标签: javascript datetime date
具有 3 个小数位和一个“T”的该格式的日期时间在传递给 Date.parse 或 Date 构造函数时具有 well-defined behaviour:
console.log(Date.parse('2012-07-04T18:10:00.000+09:00'));
// 1341393000000 on all conforming engines
您必须小心始终提供符合 JavaScript 规范的输入,否则您可能会在不知不觉中退回到实现定义的解析,因为实现定义的解析在浏览器和环境中并不可靠。对于那些其他格式,有诸如使用正则表达式手动解析之类的选项:
var googleDate = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})\.(\d{3})([+-]\d{2}):(\d{2})$/;
function parseGoogleDate(d) {
var m = googleDate.exec(d);
var year = +m[1];
var month = +m[2];
var day = +m[3];
var hour = +m[4];
var minute = +m[5];
var second = +m[6];
var msec = +m[7];
var tzHour = +m[8];
var tzMin = +m[9];
var tzOffset = tzHour * 60 + tzMin;
return Date.UTC(year, month - 1, day, hour, minute - tzOffset, second, msec);
}
console.log(parseGoogleDate('2012-07-04T18:10:00.000+09:00'));
或功能齐全的库,例如 Moment.js。
【讨论】:
Date.parse() is notoriously unreliable across browsers - 现在是 2020 年。这句话仍然成立吗?
【讨论】:
moment('2012-07-04T18:10:00.000+09:00').unix() 应该可以解决问题。