白板的微信
所提供的所有示例都无法在凌晨12:00到12:59之间工作。如果正则表达式与时间不匹配,它们也会抛出错误。以下处理:function parseTime(timeString) {
if (timeString == '') return null;
var time = timeString.match(/(\d+)(:(\d\d))?\s*(p?)/i);
if (time == null) return null;
var hours = parseInt(time[1],10);
if (hours == 12 && !time[4]) {
hours = 0;
}
else {
hours += (hours < 12 && time[4])? 12 : 0;
}
var d = new Date();
d.setHours(hours);
d.setMinutes(parseInt(time[3],10) || 0);
d.setSeconds(0, 0);
return d;}var tests = [
'1:00 pm','1:00 p.m.','1:00 p','1:00pm','1:00p.m.','1:00p','1 pm',
'1 p.m.','1 p','1pm','1p.m.', '1p', '13:00','13', '1a', '12', '12a', '12p', '12am', '12pm', '2400am', '2400pm', '2400',
'1000', '100', '123', '2459', '2359', '2359am', '1100', '123p',
'1234', '1', '9', '99', '999', '9999', '99999', '0000', '0011', '-1', 'mioaw' ];for ( var i = 0; i < tests.length; i++ ) {
console.log( tests[i].padStart( 9, ' ' ) + " = " + parseTime(tests[i]) );}这适用于在其中包含时间的字符串。因此“abcde12:00pmdef”将被解析并返回12 pm。如果期望的结果是它仅返回字符串仅包含时间的时间,则可以使用以下正则表达式,前提是将“time [4]”替换为“time [6]”。/^(\d+)(:(\d\d))?\s*((a|(p))m?)?$/i