为了账号安全,请及时绑定邮箱和手机立即绑定

从Javascript中的用户输入解析Date对象的时间的最佳方法是什么?

从Javascript中的用户输入解析Date对象的时间的最佳方法是什么?

慕盖茨4494581 2019-08-17 16:37:17
从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


查看完整回答
反对 回复 2019-08-17
?
Helenr

TA贡献1780条经验 获得超4个赞

不要费心去做,只需使用datejs


查看完整回答
反对 回复 2019-08-17
  • 3 回答
  • 0 关注
  • 451 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号