我有一个日期对象来自服务器的UTC tz。
我想在客户端上做一些日期算术,比如添加天数等,然后将其发送回服务器。
做类似的事情:
{{1}}
保留原始时区?
答案 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时区中的内部号码,或者是投射到本地时区的号码。