Javascript 新日期对不同日期样式的处理方式不同?

标签 javascript html date

我在 firefox scratchpad 中测试了以下代码并得到了有趣的结果?

var date=new Date("2012-05-12");
var date2 = new Date("05/12/2012");
date;
/*
Fri May 11 2012 17:00:00 GMT-0700 (Pacific Daylight Time)
*/
date2;
/*
Sat May 12 2012 00:00:00 GMT-0700 (Pacific Daylight Time)
*/

两个日期不同。显然这是由于时区问题。我想要的是 date2 结果。如何让 js 引擎正确处理 ISO 日期样式?

最佳答案

我认为问题在于字符串“2012-05-12”被视为 ISO 8601 日期,而“05/12/2012”是 RFC 2822 日期。在 ISO 格式中,缺少时区意味着 UTC。 5 月 12 日上午午夜,在加利福尼亚州(或您所在的任何地方)是前一天晚上 7 点。

然而,没有时区的 RFC 日期是在假设您需要本地 时区午夜时间戳的情况下进行解析的。 (好吧,不一定是您的时区;您的 JavaScript 运行的计算机的时区:-)

如果将这些字符串传递给 Date.parse(),您会看到不同之处。

RFC 日期格式可以包含明确的时区,但 ISO 格式不能。 (好吧,它可以,但浏览器不会注意,显然 IE 根本不处理这些。)

edit — 这是一个简单的(愚蠢的;没有错误检查)函数,它会为您提供 3 部分 ISO 表格中的日期:

function isoDate( str ) {
  var rv = null;
  str.replace(/^(\d\d\d\d)-(\d\d)-(\d\d)$/, function(_, yr, mn, dy) {
    rv = new Date(parseInt(yr, 10), parseInt(mn, 10) - 1, parseInt(dy, 10));
  });
  return rv;
}

关于Javascript 新日期对不同日期样式的处理方式不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11195881/

相关文章:

date - Elasticsearch 日期范围过滤器不起作用

来自单独列中的 int 和 string 的日期值

javascript - Mongoose 聚合不排序日期

javascript - 在 JavaScript 中合并

javascript - 模态对话框在网站中默认打开一次

javascript - jQuery - 单击基于 css 类和链接名称的链接

php - 使用 PHP 和 AJAX 计算日期选择器的日期

javascript - 在javascript es6中将嵌套对象转换为递归数组或嵌套数组

javascript - 如何查找所有Javascript对象的方法和属性?

javascript - 需要触摸设备在覆盖另一个元素时保持 touchmove 事件触发吗?