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

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

我正在使用表单窗口小部件,用户可以将一天中的时间输入到文本输入中(对于日历应用程序)。使用JavaScript(我们使用jQuery FWIW),我想找到解析用户输入JavaScript Date()对象的文本的最佳方法,这样我就可以轻松地对其进行比较和其他事情。

我尝试了这种parse()方法,对我的需求来说有点挑剔。我希望它能够成功地将以下示例输入时间(除了其他逻辑上相似的时间格式)解析为同一个Date()对象:

  • 1:00 PM

  • 1:00 PM

  • 凌晨1点

  • 1:00 PM

  • 1:00 PM。

  • 1:00P

  • 下午1点

  • 下午1点

  • 1 p

  • 下午1点

  • 下午1点

  • 1P

  • 13:00

  • 13

我想我可能会使用正则表达式来分割输入并提取我想用来创建Date()对象的信息。做这个的最好方式是什么?


慕盖茨4494581
浏览 452回答 3
3回答

白板的微信

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

Helenr

不要费心去做,只需使用datejs。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript