【问题标题】:Javascript set Date object from multiple stringsJavascript从多个字符串中设置日期对象
【发布时间】:2018-07-06 01:03:45
【问题描述】:

我对在 JavaScript 中创建日期真的很陌生,我有一个非常有趣的情况,我需要在 Javascript 中创建一个 Date 对象,但是来自 API 的所有时间片段都在不同的地方,即:

"Thursday": {
  "times": {
    "currently_open": false,
    "status": "open",
    "hours": [
      {
        "from": "8:00am",
        "to": "1:00am"
      }
    ]
  },
  "date": "2018-07-12",
  "rendered": "8:00am - 1:00am"
},

所以不知何故,我需要将date 中的所有元素与hours[0].from 时间结合起来。但是因为在这个例子中实际时间以8:00am 出现在一个字符串中,所以我不确定我必须做什么才能将它转换为 JavaScript 可以读取的时间。

这可能很愚蠢,但我尝试通过组合来自 API 数据的值来创建一个新的 Date 对象,如下所示:

openTime = new Date( Thursday.date + 'T' + Thursday.times.hours[0].from + 'Z' );

它不起作用。哈哈。有没有人有什么建议?基本上,我尝试通过将所有部分加在一起来创建一个字符串。任何帮助都会很棒。谢谢。

【问题讨论】:

    标签: javascript string date


    【解决方案1】:

    您的时间/日期格式非常独特,您必须手动解析:

    const Thursday = {
      "times": {
        "currently_open": false,
        "status": "open",
        "hours": [
           {
            "from": "8:00am",
            "to": "1:00am"
            }
        ]
      },
      "date": "2018-07-12",
      "rendered": "8:00am - 1:00am"
    }
    
    let [hours, minutes] = Thursday.times.hours[0].from.split(":").map(el => parseInt(el));
    
     if (Thursday.times.hours[0].from.includes("pm"))
      hours += 12;
    
    const date = new Date(...Thursday.date.split("-").map((n, i) => n - (i === 1)), hours, minutes);
    console.log(date.toString())

    【讨论】:

    • @JonasW。对了!谢谢!这个解决方案就像一个冠军!我不得不稍微调整一下,因为我还没有准备好预处理 ES6.. :(
    【解决方案2】:

    使用 Moment.js:

    const time = Thursday.hours[0].from;
    
    const match = /(.*)((a|p)m)/.exec(time);
    
    const hourMin = match[1].length === 4 ? `0${match[1]}` : match[1];
    
    const amPm = match[2];
    
    const openTime = moment(`${Thursday.date} ${hourMin} ${amPm}`).toDate();
    

    【讨论】:

    • 答案不应依赖于未在 OP 中标记或提及的库。您对 moment.js 的使用也不是最佳的,您应该告诉解析器它必须解析的字符串的格式,否则您只是希望解析器启发式是您想要的。 amPm 逻辑会像Thursday.hours[0].from.slice(-2) 一样简单。
    猜你喜欢
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    相关资源
    最近更新 更多