在 Javascript 中将"February 03, 2022 at 04:52PM"解析为 Date 的简单方法



抱歉,我是一个使用Javascript的新手,我找不到任何简单的方法将February 03, 2022 at 04:52PM解析为Date对象。

我能想到的最好的方法是使用Regex将字符串的每个部分拆分为自己的组件,然后创建一个新的Date对象。但是我还需要一个switch语句来解析月份。

我需要在纯JS中做到这一点,没有库。

我最终以艰难的方式完成了这项工作。我希望Javascript支持C标准的日期和时间说明符来解析日期字符串,但我想这必须做到:

jsfiddle

function getDateObj(inputStr){
const monthObj = {
'Jan':0,
'Feb':1,
'Mar':2,
'Apr':3,
'May':4,
'Jun':5,
'Jul':6,
'Aug':7,
'Sep':8,
'Oct':9,
'Nov':10,
'Dec':11,
};
const regexMonth = /(...).*/;
const regexDate = /.*? ([0-9]{2}).*/;
const regexYear = /([0-9]{4})/;
const regexHour = /([0-9]{2}):[0-9]{2}(AM|PM)/;
const regexMin = /[0-9]{2}:([0-9]{2})(AM|PM)/;
const regexAmpm = /[0-9]{2}:[0-9]{2}((AM|PM))/;
const month = monthObj[inputStr.match(regexMonth)[1]];
const date = parseInt(inputStr.match(regexDate)[1]);
const year = parseInt(inputStr.match(regexYear)[1]);
const hour = parseInt(inputStr.match(regexHour)[1]);
const min = parseInt(inputStr.match(regexMin)[1]);
const ampm = inputStr.match(regexAmpm);
let realHour = 0;
if (ampm[1] === 'PM') {
realHour = parseInt(hour) + 12;
} else {
realHour = parseInt(hour);
}
const dateObj = new Date(year, month, date, hour, min, 0);
return dateObj;
}
console.log(getDateObj('February 03, 2022 at 04:52PM').toString());
// "Thu Feb 03 2022 04:52:00 GMT+X (XXX Standard Time)"

使用moment.js,您可以按原样解析字符串并定义格式。前往librarys页面,打开开发控制台即可使用它!

基本上你确实想这样做:

const date = moment('February 03, 2022 at 04:52PM', 'MMMM DD, YYYY at hh:mm A')

相关内容

最新更新