Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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_Date_Timezone - Fatal编程技术网

Javascript 对具有不同时区的新日期返回对象的后续调用

Javascript 对具有不同时区的新日期返回对象的后续调用,javascript,date,timezone,Javascript,Date,Timezone,我面临着一种奇怪的情况,即传递时间戳的Date构造函数的后续调用返回具有不同时区的日期对象 当我使用对象获取月份的某一天时,这导致了一个问题 new Date(1509228000000).getDate() 29 new Date(1509314400000).getDate() 29 如果使用同一时区,结果将是29和30 我的理解是javascript应该使用系统或浏览器时区。我不明白两个调用,一个接一个,如何返回不同时区的对象 我使用的是Chrome版本61.0.3163.100(官方

我面临着一种奇怪的情况,即传递时间戳的
Date
构造函数的后续调用返回具有不同时区的日期对象

当我使用对象获取月份的某一天时,这导致了一个问题

new Date(1509228000000).getDate()
29
new Date(1509314400000).getDate()
29
如果使用同一时区,结果将是29和30

我的理解是javascript应该使用系统或浏览器时区。我不明白两个调用,一个接一个,如何返回不同时区的对象

我使用的是Chrome版本61.0.3163.100(官方版本)(64位)

澄清
我知道时间戳(毫秒数)可以在不同的时区中表示。我不明白的是,调用具有不同值的日期构造函数如何在同一台机器和浏览器中生成具有不同时区的日期对象。

在欧盟国家,中欧夏季时间(CEST)将于2017年10月29日当地时间凌晨3:00过渡到中欧时间(CET)。您的结果只是反映了这种变化。这种行为是意料之中的

需要说明的是,您显示的两个值都是在10月29日的本地时区。调用
getDate()
的正确结果实际上是29

为了进一步了解,我建议您阅读:

  • 社区维基

在欧盟国家,中欧夏季时间(CEST)将于2017年10月29日当地时间凌晨3:00过渡到中欧时间(CET)。您的结果只是反映了这种变化。这种行为是意料之中的

需要说明的是,您显示的两个值都是在10月29日的本地时区。调用
getDate()
的正确结果实际上是29

为了进一步了解,我建议您阅读:

  • 社区维基

如果您让我放松总体技术准确性(同时希望不要说任何明显错误的话),我认为JavaScript
Date
对象更好地理解,如果您将其视为存储绝对特定时间点(Unix时间戳,如果您愿意)的变量。这个内部值没有附加时区信息,因为它不是必需的(毕竟它是一个绝对值),而且它是JavaScript需要的一切。。。直到它必须与外部世界交互,即解析或生成人类可读的日期

这样的日期总是本地的,因此需要一个时区。JavaScript创建者使用的方法是使用两个时区:

  • UTC
  • 在运行JavaScript代码的计算机中,将任何时区配置为默认时区
有趣的是,选择哪一个取决于所涉及的方法。如果你打电话,你得到当地时间,如果你打电话,你得到UTC。还不错吧?嗯,你还有。。。。你能不看文档就知道每个人使用哪个时区吗?甚至在看过医生之后?而且,日期构造函数实际上可以同时使用这两种方法,具体取决于字符串和浏览器

尽管如此,更容易理解的是,您的两个代码示例指向非常特定的时间点。当你用当地时间打电话时,魔术就发生了。你的电脑显然位于欧洲某个地方。根据大多数地方立法,夏时制在几个月内有效,其技术实施方式实际上是在两个不同时区之间切换:CET(中欧时间)和CEST(中欧夏季时间)。JavaScript引擎足够聪明,能够意识到本地时区的变化,并且能够为存储在对象中的绝对时间选择正确的时区


如果你好奇,这是可能的,因为浏览器有一个。这样的数据库是许多程序共享的宝贵资源。

如果让我放松总体技术准确性(同时希望不要说任何明显错误的话),我认为JavaScript
Date
对象更好地理解,如果您将其视为存储绝对特定时间点的变量(如果您愿意,可以使用Unix时间戳). 这个内部值没有附加时区信息,因为它不是必需的(毕竟它是一个绝对值),而且它是JavaScript需要的一切。。。直到它必须与外部世界交互,即解析或生成人类可读的日期

这样的日期总是本地的,因此需要一个时区。JavaScript创建者使用的方法是使用两个时区:

  • UTC
  • 在运行JavaScript代码的计算机中,将任何时区配置为默认时区
有趣的是,选择哪一个取决于所涉及的方法。如果你打电话,你得到当地时间,如果你打电话,你得到UTC。还不错吧?嗯,你还有。。。。你能不看文档就知道每个人使用哪个时区吗?甚至在看过医生之后?而且,日期构造函数实际上可以同时使用这两种方法,具体取决于字符串和浏览器

尽管如此,更容易理解的是,您的两个代码示例指向非常特定的时间点。当你用当地时间打电话时,魔术就发生了。你的电脑显然位于欧洲某个地方。根据大多数地方立法,夏时制在几个月内有效,其技术实施方式实际上是在两个不同时区之间切换:CET(中欧时间)和CEST(中欧夏季时间)。JavaScript引擎足够聪明,能够意识到本地时区的变化,并且能够为存储在对象中的绝对时间选择正确的时区

如果你好奇,这是可能的,因为浏览器有一个。这样的数据库是许多程序共享的宝贵资源。

CET和CEST只是很短