Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在不同时区克隆日期对象是否保留其原始时区?_Javascript_Datetime - Fatal编程技术网

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

Javascript 在不同时区克隆日期对象是否保留其原始时区?,javascript,datetime,Javascript,Datetime,我有一个日期对象来自UTC tz中的服务器 我想用它在客户机上做一些日期算法,比如添加天数等,然后将其发送回服务器 做一些类似于: 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

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

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

做一些类似于:

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。

日期对象没有时区。他们的一些方法,比如getDate而不是getUTCDate或toString,使用本地时区来计算返回的结果

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

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

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

你说:

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

由于无法直接传输日期对象,我假设您实际传输的是一个字符串,其中包含解析为日期对象的日期和时间值,或者您传输了一个基于UTC的时间戳的数值,并将其加载到日期对象中

因此,询问时区是否将从原始输入中保留是没有意义的。第一次创建日期对象时提供的任何输入都已丢失。日期对象所拥有的只是UTC时区中的内部数字,或投影到本地时区的数字。

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

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

你说:

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

由于无法直接传输日期对象,我假设您实际传输的是一个字符串,其中包含解析为日期对象的日期和时间值,或者您传输了一个基于UTC的时间戳的数值,并将其加载到日期对象中


因此,询问时区是否将从原始输入中保留是没有意义的。第一次创建日期对象时提供的任何输入都已丢失。对于日期对象,您所拥有的只是UTC时区中的内部数字,或投影到本地时区的数字。

那么,从理论上讲,同时在两个不同时区创建两个日期对象将产生完全相同的对象值?另外,使用js-toJSON发送回去也安全吗?@Michael重新阅读了这个答案。它清楚而正确地指出日期没有时区。但是,它们可以表示为给定特定GMT偏移量的时间,例如+04:00。toJSON是安全的,因为它代表ToIsoStrings。因此,理论上同时在两个不同时区创建两个日期对象将产生完全相同的对象值?另外,使用js-toJSON发送回去也安全吗?@Michael重新阅读了这个答案。它清楚而正确地指出日期没有时区。但是,它们可以表示为给定特定GMT偏移量的时间,例如+04:00。toJSON是安全的,因为它委托给toISOString
UTC不是时区。偏移量为0,通常表示为Z。@torazaburo感谢clarification@torazaburo-事实上,它是一个相对于TAI或UT1的区域,但将其视为偏移或时区也是有效的。真正时区唯一不具备的特性是它不属于特定的地理区域。UTC不是时区。偏移量为0,通常表示为Z。@torazaburo感谢clarification@torazaburo-事实上,它是一个相对于TAI或UT1的区域,但将其视为偏移或时区也是有效的。真实时区唯一不具备的特性是它不属于特定的地理区域。回答得好,谢谢你为我揭开js日期的神秘面纱:如果你对更多内容感兴趣,我在我的Pluralsight课程中也有一个关于Javascript的深入部分:。回答得好,感谢您为我揭开js日期的神秘面纱:如果您对更多内容感兴趣,我的Pluralsight课程中还有一个关于Javascript的深入探讨部分:。