Javascript 使用时区时JS Date返回错误的日期

Javascript 使用时区时JS Date返回错误的日期,javascript,datetime,Javascript,Datetime,我在GMT+1和夏季时间(GMT+2),使用MS Edge,语言设置为英语(美国)。从同一日期创建不同年份的新日期会返回不同的区域设置日期字符串 新日期(“1979-09-10T22:00:00.000Z”)。toLocaleDateString() // "9/10/1979" 新日期(“1980-09-10T22:00:00.000Z”)。toLocaleDateString() //“1980年9月11日”->对我来说是正确的一天 我猜这些年来,所使用的语言环境在时区方面进行了改革。如何

我在GMT+1和夏季时间(GMT+2),使用MS Edge,语言设置为英语(美国)。从同一日期创建不同年份的新日期会返回不同的区域设置日期字符串

新日期(“1979-09-10T22:00:00.000Z”)。toLocaleDateString()
// "9/10/1979"
新日期(“1980-09-10T22:00:00.000Z”)。toLocaleDateString()
//“1980年9月11日”->对我来说是正确的一天
我猜这些年来,所使用的语言环境在时区方面进行了改革。如何检查原因?

使用获取当前具有偏移量+1和某种DST的规范IANA代表位置,这些位置没有返回“1979-09-10T22:00:00.000Z”和“1980-09-10T22:00:00.000Z”的预期字符串,返回了以下列表:

  • 地点:非洲/卡萨布兰卡标准:+01:00夏令时:+00:00
  • 地点:非洲/休达标准:+01:00夏令时:+02:00
  • 地点:非洲/厄尔尼翁标准:+01:00夏令时:+00:00
  • 地点:欧洲/安道尔标准:+01:00夏令时:+02:00
  • 地点:欧洲/贝尔格莱德标准:+01:00夏令时:+02:00
  • 地点:欧洲/都柏林标准:+01:00夏令时:+00:00
  • 地点:欧洲/直布罗陀标准:+01:00夏令时:+02:00
  • 地点:欧洲/苏黎世标准:+01:00夏令时:+02:00
  • 快速检查以确定以上哪项现在观察到+2的DST,但没有将列表缩减为:

  • 非洲/卡萨布兰卡
  • 非洲/休达
  • 欧洲/安道尔
  • 欧洲/贝尔格莱德
  • 欧洲/直布罗陀
  • 欧洲/苏黎世
  • 目前,所有仪器的标准偏移量为+1,DST为+2,但在1979年或1980年没有观测到DST。因此,您很可能正在使用其中一个位置(或链接到上述位置之一的另一个位置作为别名或因为它已弃用)

    一些地点代表许多其他地点,例如欧洲/苏黎世也是和的标准地点,也用于

    DST在欧洲可能会继续发生变化,尤其是欧盟希望完全停止观察DST。从2020年起,成员国可以选择是否继续遵守这一原则。一些人将继续观察它,一些人将全年使用他们的标准偏移量,一些人将全年使用他们的DST偏移量。预计世界其他地区也会开始更频繁地处理抵消问题


    也有像爱尔兰这样的地方在夏天遵守标准时间(+1),在冬天将时钟向后拨1小时(+0),这就是为什么欧洲/都柏林在冬天的DST似乎为-1小时。:-)

    你可能会发现,在一年中,标准时间是当地9月10日的1:00和23:00,而在另一年,标准时间是当地9月11日的00:00。系统设置为哪个IANA位置?请注意,许多地方已不时更改其观测DST的日期,以及是否观测DST。ECMAScript日期对象是观察历史更改所必需的。PS您可以在以下位置检查历史时区更改。e、 答得好。时区在讨论的日期没有DST。有没有办法确定JS使用的时区(按名称,例如Europe/Vaduz)?@Johannes不可靠。使用timeZoneName进行toLocaleString:“long”选项可能会生成civil名称,但这些名称不是标准化的,并且在同一地点的不同实现中可能会得到不同的结果。还要注意的是,民用时区由行政边界定义,而IANA代表性位置(如欧洲/瓦杜兹)实际上意味着“该特定位置的历史时区偏移和DST变化”,可能适用于其他位置,但没有定义地理边界(尽管我相信谷歌正试图从经验上做到这一点)。