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



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

我想用它在客户端做一些日期运算,如添加日期等,并将其发送回服务器。

这样做:

var newDate = new Date(date);          // cloning a date in utc
newDate.setDate(result.getDate() + 7); // expecting the new date to be in utc as well

保留原来的时区?

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

那么回答您的问题,是的,您的示例代码保留了原始时区。只要确保在序列化发送到服务器时,使用toISOString()(或toJSON())而不是toString()

Date对象内部只通过UTC跟踪值。它只保留一个数字,即从UTC时间1970年1月1日午夜开始经过的毫秒数。

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

你说

:

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

由于直接传输Date对象是不可能的,我假设您实际传输的是包含日期和时间值的字符串,该字符串被解析为Date对象,或者您传输的是基于utc的时间戳的数值,您加载为Date对象。

因此,询问是否保留原始输入的时区是没有意义的。您在第一次创建Date对象时提供的任何输入都已经丢失了。所有Date对象都是UTC时区的内部数字,或者投影到本地时区的数字。

相关内容

  • 没有找到相关文章

最新更新