如何在javascript中正确区分时区和日期?

时间:2019-05-27 20:19:53

标签: javascript json date

在javascript中,我有一个UTC日期,我想对其进行字符串化和解析,但要保持它为UTC。我做了这段代码

var f = {f:new Date(“ 2019年5月27日星期一20:11:13 GMT-0400(东部夏令时间)”)

  

未定义

JSON.stringify(f)

  

“ {” f“:” 2019-05-28T00:11:13.000Z“}”

JSON.parse(JSON.stringify(f))

  

{f:“ 2019-05-28T00:11:13.000Z”}

您可以看到,我对它进行了字符串化后,更改为第二天。然后,当我解析它时,它将它保留为字符串,甚至是第二天。我想要它,以便在解析它之后,我得到Mon May 27 2019 20:11:13 GMT-0400 (Eastern Daylight Time)的Date对象。

有人知道怎么了吗?

谢谢

1 个答案:

答案 0 :(得分:0)

  

您可以看到,我对它进行了字符串化处理后,更改为第二天

不,不是。将“格林尼治标准时间2019年5月27日20:11:13(东部夏令时间)”解析为1559002273000的时间值,该时间值定义了一个时间点,该时间点是1970-01-01T00:00:00Z之后的毫秒数。等效于2019-05-28T00:11:13.000Z(以及其他时区中的其他时间戳)。例如。在设置为澳大利亚东部时区的系统上,您会收到“ Tue May 28 2019 10:11:13 GMT + 1000(AEST)”。

  

我想要它,以便在解析之后,我可以返回2019年5月27日星期一5月27日GMT-0400(东部夏令时间)的Date对象

日期对象不知道原始时间戳的时区,它仅存储时间值。 toString 生成的字符串仅使用主机系统时区设置来生成ECMA-262指定格式的“本地”时间戳。请注意,时区名称取决于实现,并且由于它们不是标准化的,因此名称和缩写在实现之间会有所不同。例如。 Safari显示“ AEST”,而Firefox显示“ Australian Eastern Standard Time”。

您可以使用toLocaleString为不同的时区生成时间戳,但是date对象不知道原始时区是什么,并且格式可能不是您想要的。

此外, toLocaleString 使用IANA timezone identifiers(例如非洲/金沙萨),它与用来推论适用时区的地理位置有关,而不是像“东部夏令时间”这样的通用名称,没有标准化,可能含糊不清或晦涩难懂。 IANA指定者意味着夏令时和历史时区偏移量更改等内容比其他指定者更容易应用。