【问题标题】:create javascript Date object from string YYYY-MM-DD in local timezone在本地时区从字符串 YYYY-MM-DD 创建 javascript Date 对象
【发布时间】:2018-01-20 02:13:35
【问题描述】:

我已经构建了一个应用程序,它使用纯 JavaScript 日期对象和 date-fns 来格式化和操作对象。

该应用程序在我开发它的 GMT 中完美运行,但是我现在在美国西海岸,我发现由于时区差异,我的许多日期对象都被丢弃了。

我正在从字符串创建日期对象,或者只是 YYYY-MM-DDYYYY-MM-DD HH:mm,例如 new Date('2018-01-19')new Date('2018-01-19 08:00')

问题是,当我从 YYYY-MM-DD 格式的字符串创建日期时,它会创建不考虑本地时区的对象。

const date1 = new Date('2018-01-19');
const date2 = new Date('2018-01-19 00:00');

const dateString1 = format(date1, 'YYYY-MM-DD');     // gives '2018-01-18'
const dateString2 = format(date2, 'YYYY-MM-DD');     // gives '2018-01-19'

根据您是否消磨时间,行为不一致。如果您传递时间,则日期对象将固定为本地时区,但如果您不传递,则将其固定为 UTC。我想要的是,如果我传递一个没有时间(只有年、月和日)的日期字符串,它也会创建一个日期对象,假设它将是当地时区的一天的开始。

这是为什么?每次创建 Date 对象时,我是否只需将时间设置为00:00

【问题讨论】:

标签: javascript date datetime


【解决方案1】:

“这是为什么?”

来自the documentation:“对 ISO 8601 格式的支持不同之处在于仅日期字符串(例如“1970-01-01”)被视为 UTC,而不是本地。

不建议从字符串中解析日期;建议通过拆分字符串并使用各个组件作为参数来手动完成。或者使用日期库。

【讨论】:

  • 甜蜜。感谢那。我想知道他们为什么决定这样做?这不是一致的行为......无论如何,我创建了一个小助手函数,我在创建日期对象时将日期字符串传递给它,如果需要,它只是在字符串末尾添加一个 00:00:return new Date(dateString.length > 10 ? dateString : ${日期字符串} 00:00)。似乎在做伎俩:-)
猜你喜欢
  • 2016-01-22
  • 2022-07-07
  • 2020-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多