【问题标题】:Javascript date acting strange [duplicate]Javascript日期表现奇怪[重复]
【发布时间】:2023-03-22 13:41:01
【问题描述】:

为什么这给我的是 9 月 30 日而不是 10 月 1 日?

var dob = new Date("1999-10-01")
console.log(dob.toString())

【问题讨论】:

  • 因为您没有指定时区。
  • 它正在取消您的本地系统时间。对我来说,这是 BST,所以显示为 GMT+1
  • 您使用的是非标准日期格式,所以您很幸运它为您提供了一个日期实例。它可能将您的日期字符串解释为 UTC 日期/时间,而您比 UTC 晚了几个小时。
  • 它给了我 Fri Oct 01 1999 02:00:00 GMT+0200 :也许它处理本地时区?
  • @Pointy 格式为标准ISO86001

标签: javascript


【解决方案1】:

您正在创建一个日期 new Date("1999-10-01") 并使用使用本地时区的方法 toString() 对其进行解析:

var dob = new Date("1999-10-01")

console.log(dob)
console.log(dob.toISOString())

console.log('My local time is different!')
console.log(dob.toLocaleString('es-AR', { timeZone: 'America/Buenos_Aires', timeZoneName: 'long'}))

console.log('Your local time is different?')
console.log(dob.toString())

【讨论】:

    【解决方案2】:

    您使用的格式是ISO 8601的子集
    当没有指定时区指示符时,日期构造函数中隐含了偏移 Zulu (UTC)。

    http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15

    所有数字必须以 10 为底。如果 MM 或 DD 字段不存在,“01”是 用作值。如果 HH、mm 或 ss 字段不存在,则使用“00” 因为缺席的sss字段的值和值是“000”。价值 缺少的时区偏移量是“Z”。

    换句话说,您使用的格式是有效的,它表示 UTC 的日期时间。您在控制台中看到的是您所在时区的时间。

    const date = new Date("1999-10-01");
    
    console.log(date.toLocaleDateString('ar-EG'));
    console.log(date.toString());
    console.log(date.toISOString());

    【讨论】:

      猜你喜欢
      • 2013-06-12
      • 2018-05-14
      • 2014-12-26
      • 2010-12-24
      • 1970-01-01
      • 2017-04-02
      • 1970-01-01
      • 2015-12-12
      • 2019-09-21
      相关资源
      最近更新 更多