在本地时区中从字符串 YYYY-MM-DD 创建 javascript Date 对象



我构建了一个应用程序,它使用纯javascript Date对象和date-fns来格式化和操作对象。

该应用程序在我开发的格林威治标准时间中运行良好,但是我现在在美国西海岸,我发现由于时区差异,我的许多日期对象都被抛弃了。

我正在从字符串创建日期对象,无论是YYYY-MM-DD还是YYYY-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

"这是为什么?">

来自文档:">对 ISO 8601 格式的支持不同,仅日期字符串(例如"1970-01-01")被视为 UTC,而不是本地。

实际上不建议从字符串中解析日期;建议通过拆分字符串并使用各个组件作为参数来手动执行此操作。或者使用日期库。

最新更新