【问题标题】:new Date() behaves differently in different environment, why?new Date() 在不同的环境中表现不同,为什么?
【发布时间】:2019-02-15 02:00:09
【问题描述】:

当我在 chrome 中定义相同的日期时,它会显示预期的结果。 但是当我在 node.js 中运行它时,代码如下:

var date = new Date(2015, 1, 1);
console.log(date); // it displays: 2015-01-31T16:00:00.000Z

我的问题是为什么不是 2015-02-01

【问题讨论】:

  • 您在 GMT+0800 时区吗?
  • 不是new Date() 的行为不同,而是隐式转换为格式不同的字符串(在 Node.js 的情况下,不符合 ECMA-262)。跨度>
  • 你能分享答案吗?

标签: javascript node.js date


【解决方案1】:

这是时区问题。在 Chrome 中,打印的日期和时间会根据您当地的时区信息进行调整。但是您打印的 Node.js 中的日期,它的字符串格式是 ISO 字符串,没有调整时区值。

因此,new Date(2015, 1, 1) 在 Chrome 和 Node.js 中具有相同的值。

试试console.log(date.toLocaleDateString())。你会得到 2015-2-1。

【讨论】:

  • 这更像是日期格式问题而不是时区问题。 toLocaleDateString 也可能在不同平台(例如不同的浏览器)上返回不一致的结果。对我来说,new Date(2015, 1, 1).toLocaleDateString() 在 Safari 和 Chrome 中返回 01/02/2015,在 Firefox 中返回 02/01/2015。
  • @RobG 您在 2 月 1 日演示的两种情况下都有相同的结果。但有问题的情况不同。一个是 1 月 31 日,另一个是 2 月 1 日。
【解决方案2】:

你只是在打印日期对象

var date = new Date(2015, 1, 1)
console.log(date); 

更深入的解释检查:

https://www.w3schools.com/js/js_date_formats.asp

另外,如果您的目标是使用这种格式 2015-02-01,请选中 https://momentjs.com/。对于您的情况:

(使用 moment.js)

moment(new Date(2015, 1, 1)).format('YYYY-MM-DD') // "2015-02-01"

【讨论】:

    猜你喜欢
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-08
    • 2011-06-25
    • 2016-06-05
    • 2014-10-04
    • 2016-03-14
    相关资源
    最近更新 更多