【问题标题】:How to get correct Data object from string in JavaScript [duplicate]如何从 JavaScript 中的字符串中获取正确的数据对象 [重复]
【发布时间】:2016-04-07 22:56:50
【问题描述】:

我正在尝试使用 JavaScript 中的字符串创建日期对象,但我得到的日期不正确。

例如,在下面的代码中,我将字符串设置为 5 月 17 日,但我在 JavaScript 中得到的日期是 5 月 16 日。我该如何解决这个问题?

>dateString
"2016-05-17"
>var newDate = new Date(dateString)
>newDate
Mon May 16 2016 17:00:00 GMT-0700 (Pacific Daylight Time)

【问题讨论】:

  • stackoverflow.com/a/5619588/3037869,日期操作使用 moment.js 库
  • 假设您的日期字符串是 UTC。请注意,生成日期中的时间正好是 UTC 午夜前 7 小时,这对应于偏移量 (GMT-0700)。

标签: javascript date datetime


【解决方案1】:

不要使用 Date 构造函数或 Date.parse 来解析日期字符串。格式:

"2016-05-17"

被 ISO 8601 视为本地,但被 ECMA-262 视为 UTC。有些浏览器会将其视为 UTC,有些则视为本地,有些则根本不会解析它。您的浏览器似乎将其视为 UTC(根据标准),并且您所在的时区位于 GMT 以西,因此您会看到比预期早一天的日期。

请注意,没有时区的日期和时间字符串(例如“2016-05-17T00:00:00”)被 ECMA-262 视为本地。

所以总是手动解析字符串。图书馆可以提供帮助,但通常超出了要求。因此,如果您想将“2016-05-17”解析为本地,请使用:

function parseISOLocal(s) {
  var b = s.split(/\D/);
  return new Date(b[0], b[1]-1, b[2]);
}
                  
document.write(parseISOLocal('2016-05-17'));               

【讨论】:

    猜你喜欢
    • 2021-05-24
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    相关资源
    最近更新 更多