首页 > 解决方案 > 创建新的 Date 对象时,数字日期是否需要时区?

问题描述

出于几个原因,我有一个来自服务器的日期作为“YYYY-MM-DD hh-mm-ss”格式的字符串。当我使用该字符串创建新的 Date 对象时,它会在本地时间创建日期。要正确创建日期,我必须将时区添加到该字符串:“YYYY-MM-DD hh-mm-ss PDT”。

但是当我将时间作为数值获取时 - 我在创建对象时从不添加时区,因为数值始终被视为 UTC。

我的意思是我们知道JS 将时间戳视为 UTC,但是如果使用某些时区相关性更新 UTC 值,有没有办法理解它?

也许像Math.isTimePossible(ms). jk ofc

标签: javascriptdate

解决方案


出于几个原因,我有一个来自服务器的日期作为“YYYY-MM-DD hh-mm-ss”格式的字符串。当我使用该字符串创建新的 Date 对象时,它会在本地时间创建日期。

你如何创建一个日期?ECMA-262 不支持该格式,因此解析取决于实现。Safari 至少将其视为无效日期。

要正确创建日期,我必须将时区添加到该字符串:“YYYY-MM-DD hh-mm-ss PDT”。

这不是一个好主意,请参阅#1。

我的意思是我们知道 JS 将时间戳视为 UTC,

如果“时间戳”是指数值,那么是的,它们被视为从 ECMAScript 纪元 (1970-01-01T00:00:00Z) 开始的偏移量(以毫秒为单位)。时间戳是可以解释为日期或时间的任何内容,因此“2020-11-13 00:00:00”、“星期二,晚上 11 点”和“123456”都是时间戳。

但是如果 UTC 值通过某些时区相关性进行更新,有没有办法理解它?

不清楚你的意思,UTC就是UTC。如果要解析不是 ECMA-262 支持的格式之一的字符串(仅限于toStringtoISOString生成的相同格式),请编写定制函数或使用库。有些允许使用 IANA 代表位置指定偏移信息,例如Luxondate- fns 。


推荐阅读