【问题标题】:How to convert date in RFC 3339 to the javascript date object(milliseconds since 1970)如何将 RFC 3339 中的日期转换为 javascript 日期对象(自 1970 年以来的毫秒数)
【发布时间】: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


【解决方案1】:

具有 3 个小数位和一个“T”的该格式的日期时间在传递给 Date.parseDate 构造函数时具有 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

【讨论】:

  • 谢谢你,就像一个魅力。我在正则表达式中使用了大量代码,但它停止了对我的工作,然后我花了很多时间在这里搜索和阅读,但直到现在什么都没有。我在浏览器扩展中使用它,所以它不需要是跨平台的。谢谢
  • 略微修改的版本here 处理 Z 或缺少时区、缺少 : 在时区和缺少毫秒。
  • Node.js 怎么样?在 Node 上可靠吗?
  • @rustyx:实际上,是的,但我仍然不会将它用于 ES 规范之外的格式。有日期库。
  • 2012: Date.parse() is notoriously unreliable across browsers - 现在是 2020 年。这句话仍然成立吗?
【解决方案2】:

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

这两个功能都可以让您解析和生成几乎任何格式的日期。

如果您经常使用日期,则需要使用这些库之一;这比每次都滚动自己的函数要简单得多。

希望对您有所帮助。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-08-31
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
  • 2013-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多