11

谷歌日历向我抛出 rfc3339,但我所有的日期都是自 1970 年 1 月以来的毫秒数。

RFC3999:

2012-07-04T18:10:00.000+09:00

javascript 当前时间: (new Date()).getTime():

1341346502585

我更喜欢毫秒,因为我只处理倒计时而不是日期。

4

2 回答 2

19

具有 3 个小数位和一个“T”的该格式的日期时间在传递给构造函数时具有明确定义的行为:Date.parseDate

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这样的全功能库。

于 2012-07-03T20:26:59.703 回答
4

您可以尝试两个 Javascript 日期库:

这两个都将为您提供允许您以几乎任何格式解析和生成日期的函数。

如果你经常使用日期,你会想要使用这些库之一;这比每次都滚动自己的功能要少得多。

希望有帮助。

于 2012-07-03T20:46:11.760 回答