从Javascript中的用户输入解析Date对象的时间的最佳方法是什么?我正在使用表单窗口小部件,用户可以将一天中的时间输入到文本输入中(对于日历应用程序)。使用JavaScript(我们使用jQuery FWIW),我想找到解析用户输入JavaScript Date()对象的文本的最佳方法,这样我就可以轻松地对其进行比较和其他事情。我尝试了这种parse()方法,对我的需求来说有点挑剔。我希望它能够成功地将以下示例输入时间(除了其他逻辑上相似的时间格式)解析为同一个Date()对象:1:00 PM1:00 PM凌晨1点1:00 PM1:00 PM。1:00P下午1点下午1点1 p下午1点下午1点1P13:0013我想我可能会使用正则表达式来分割输入并提取我想用来创建Date()对象的信息。做这个的最好方式是什么?
3 回答

白板的微信
TA贡献1883条经验 获得超3个赞
所提供的所有示例都无法在凌晨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
添加回答
举报
0/150
提交
取消