克隆不同时区的日期对象是否保留了原始时区?

时间:2015-05-31 18:10:31

标签: javascript datetime

我有一个日期对象来自服务器的UTC tz。

我想在客户端上做一些日期算术,比如添加天数等,然后将其发送回服务器。

做类似的事情:

{{1}}

保留原始时区?

2 个答案:

答案 0 :(得分:3)

日期对象没有时区。他们的一些方法,例如getDate(与getUTCDate相对)或toString使用本地时区来计算他们返回的结果。

因此,要回答您的问题,是的,您的示例代码会保留原始时区。请确保在序列化发送到服务器时,使用toISOString()(或toJSON())代替toString()

答案 1 :(得分:2)

Date对象仅在内部跟踪UTC的值。它只保留一个数字,即自1970年1月1日午夜以来经过的毫秒数。

也就是说,许多Date对象的函数(包括构造函数)通常使用运行代码的计算机的本地时区中的值。例如,当您执行:new Date(2015,0,1)时,虽然这将是您所在时区1月1日的午夜,但它等同于特定的基于UTC的时间戳(您可以通过调用.getTime()获得)。如果你在其他时区做同样的事情,你会得到一个不同的时间戳。此外,如果您要将时间戳记加载到某个其他时区的Date对象中,您将获得不同的本地时间 - 甚至可能不会在同一天出现!

你说:

  

我有一个日期对象来自服务器的UTC tz。

由于Date对象不可能直接传输,我假设你实际传输的是一个包含解析到{的日期和时间值的字符串{1}}对象,或者您传输的数值是基于UTC的时间戳,您将加载Date对象中。

因此,询问是否从原始输入中保留时区是没有意义的。无论您在第一次创建Date对象时提供的输入是否已丢失。拥有Date对象的所有内容都是UTC时区中的内部号码,或者是投射到本地时区的号码。