【问题标题】:Why is this JS function returning the wrong date? [duplicate]为什么这个 JS 函数返回错误的日期? [复制]
【发布时间】:2019-01-02 15:23:50
【问题描述】:

我正在使用 JS 函数来读取格式如下的 JSON:

{
  "metrics": {
"2018-12-28 12:00:00": {
  "20": 19
},
"2018-12-28 13:00:00": {
  "20": 76
},
"2018-12-28 14:00:00": {
  "20": 39
 }

} }

从此文件中,我正在创建一个新对象,其日期为“2018-12-28”格式,编号为“20”。这是函数:

let op = {}
  for(let key in names){
    let temp = new Date(key);
    let fullDate = temp.getFullYear()+'-'+temp.getMonth()+'-'+temp.getDate();
    if(op[fullDate]){
      for(let val in names[key])
      {
        if(op[fullDate][val])
         op[fullDate][val] += names[key][val]
        else op[fullDate][val] = names[key][val]
      }
    } else {
      op[fullDate] = {...names[key]};
    }
  }

问题是该函数输出的日期比“2018-11-28”晚一个月(“2018-11-28”而不是“2018-12-28”),我终生无法弄清楚原因。非常感谢任何帮助。

【问题讨论】:

  • 从 0 开始计数而不是从 1 开始计数?
  • 请注意,在 Safari 中,new Date("2018-12-28 12:00:00") 会生成无效的日期。强烈建议不要使用内置解析器。

标签: javascript json date


【解决方案1】:

见:https://www.w3schools.com/jsref/jsref_getmonth.asp

月份是从 0 开始的,所以一月是 0,十二月是 11。

【讨论】:

    【解决方案2】:

    getMonth() 从零开始。您只需加 1 即可获得所需的结果。

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMonth

    【讨论】:

    • 是的,添加 +1 解决了它。谢谢!
    • 请标记为正确:)
    猜你喜欢
    • 2016-09-12
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    相关资源
    最近更新 更多