Javascript set Date 对象来自多个字符串



我对在 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' );

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

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

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())

使用 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();

相关内容

最新更新