【发布时间】:2020-06-19 04:53:19
【问题描述】:
我在使用 CMS 时有点噩梦,它可以保存没有时区的日期时间。由于各种基础架构原因我无法调整核心文件,我只能调整 CMS 字段本身的一些 javascript,而不能包含外部库(或 dayjs UTC 插件)。
目前的运作方式:
- CMS 保存日期时间字符串,如下所示:
2020-10-29 05:00缺少时区 - 重新加载时,dayjs 将字符串
2020-10-29 05:00解析为UTC,并根据浏览器区域设置更改时间。 - 如果您使用的浏览器不是 UTC,则显示的时间将与保存的字符串不对应
我的小窍门:
- 加载字符串时,获取浏览器的时区
- 修改字符串
2020-10-29 05:00以包含浏览器的时区,或偏移日期对象,以便在解析为“本地”时正确显示
我最初的想法只是在显示之前添加/减去偏移量,但它似乎仍然不起作用(我认为是由于 getTimezoneOffset 没有针对夏令时进行调整?):
let date = new Date('2020-10-29 05:00')
console.log(new Date(date.setMinutes(date.getMinutes() + new Date().getTimezoneOffset())))
我想这个问题的另一种形式是:有没有办法像解析本地时间一样解析 UTC 日期时间字符串?
【问题讨论】:
-
getTimezoneOffset 将 DST 考虑在内。但是使用
new Date().getTimezoneOffset(),您将看到与今天日期的偏移量 - 这可能与实际适用于您的日期的偏移量不同。 -
嗨@CBroe,谢谢,但我认为这并不重要,因为我只想让时间完全按照它的外观显示,而不需要针对浏览器的区域设置进行本地化/调整。
-
当然,当您想通过考虑本地时区偏移来解析日期时,这很重要。在使用 DST 的国家/地区,当地时区偏移量将不同,具体取决于您的日期是在夏令时还是冬令时。
-
对不起,我的意思是(如果我仍然误解,请纠正我),我只是获取当前时区偏移量,并尝试将其添加到日期(例如:
getTimezoneOffset()说我们是提前 60 分钟,所以从时间和显示中删除 60 分钟 - 应该等于原始时间,不是吗?)
标签: javascript datetime dayjs