如何使JavaScript Date.prototype.toString()始终显示本地时区

Fly*_*rse 3 javascript timezone

我设置了UTC + 0时间,并希望它显示在每台计算机的本地时区的不同计算机上.但是当我在计算机(VMware VM)中运行Chrome中的代码时,它给了我以下信息:

Date.UTC(2014, 0, 27, 6) // 1390802400000
var now = new Date()               // Tue Aug 05 2014 07:32:38 GMT-0400 (EDT)
now.getTime()     // 1407238358829
new Date(1407238358829)  // Tue Aug 05 2014 07:32:38 GMT-0400 (EDT)
new Date(1390802400000)  // Mon Jan 27 2014 01:00:00 GMT-0500 (EST)
Run Code Online (Sandbox Code Playgroud)

我的电脑是GMT-4,但为什么最后一行显示的是EST的时间而不是EDT?

我也在其他计算机上尝试相同的代码,例如EC2实例(GMT + 0)和我的朋友(GMT + 8),这些计算机只显示其本地时区的时间.

但为什么我的电脑显示其他时区的时间?

Mat*_*int 7

代码工作正常.这就是时区实际工作的方式.希望一些适当的术语能够清除你的困惑.

A"时区偏移"是一样的"时间区".您可以在timezone标记wiki的 "Time zone!= offset"部分中阅读更多相关信息.

你说:

我的电脑是GMT-4

这是不正确的.您的计算机位于北美"东部时间"时区.在Linux/Mac上,这可能会显示为"America/New_York".在Windows上,它将在您的控制面板中显示为"东部时间(美国和加拿大)".

此时区在冬季的时区偏移为UTC-05:00,夏令时的UTC-04:00在夏令时有效.我们分别将这些称为"东部标准时间"(或东部标准时间)和"东部夏令时间"(或东部夏令时间).虽然有时这些被称为"时间区"指的是,您不妨考虑一下他们的"时区段" -因为它们指的只是部分的实际时区.

回顾一下:

EST = Eastern Standard Time = UTC-05:00 = GMT-5
EDT = Eastern Daylight Time = UTC-04:00 = GMT-4

ET = Eastern Time = "America/New_York" = "Eastern Time (US & Canada)"
  - Uses EST in the winter
  - Uses EDT in the summer
Run Code Online (Sandbox Code Playgroud)

new Date(1390802400000) 显示为EST,因为该值是1月份,即冬季.

你还说:

我也在其他计算机上尝试相同的代码,例如EC2实例(GMT + 0)和我的朋友(GMT + 8),这些计算机只显示其本地时区的时间.

EC2实例可能配置为UTC.这是服务器的最佳实践.这意味着它将始终具有零偏移.夏令时不会改变.

您朋友的计算机可能处于不遵守夏令时的时区.例如(我猜这里),也许他在"Asia/Shanghai"时区,这在中国使用.由于中国不使用夏令时,因此他的抵消时间为UTC + 08:00.

您可以在此处查看时区列表及其偏移量.