检查时间

Checking for time

我有一个表单域,其中可能有日期和时间。我需要确认日期和时间都存在。

 <input type="text" name="transdate" ... />

我可以用isDate(form.transdate)检查是否有日期,但它不检查是否有时间。我希望有一个 isTime() 函数。

附录

日期时间字段可以设置为

这些字段通过

连接
 date_cat = "#form.trans_date# #form.trans_date_h#:#form.trans_date_m# #form.trans_date_t#";

当我运行这段代码时:

cat: #date_cat# isValid(date): #isValid('date', date_cat)# isValid(time): #isValid('time', date_cat)#

我明白了

cat: 12/05/2018 :24 PM isValid(date): YES isValid(time): YES

我是这样处理的,我在连接之前验证了字段

if (form.trans_date_h == "" || form.trans_date_m == "" || form.trans_date_t == "") {
   // error handling here

然后拼接

date_cat = "#form.trans_date# #form.trans_date_h#:#form.trans_date_m# #form.trans_date_t#";

有些人讨厌正则表达式。我爱他们。为什么不只检查连接的字符串?

dtRegEx = "^(0[1-9]|1[0-2])/(0[1-9]|[1-2][0-9]|3[0-1])/[1-9][0-9]{3} (0[0-9]|1[0-2]):[0-5][0-9] (am|pm)$";

if (reFind(dtRegEx, date_cat) and isDate(date_cat)) {
    // valid datetime
} else {
    // invalid datetime
}

正则表达式分解

^
    string has to start with the whole pattern

(0[1-9]|1[0-2])
    month in range from 01 to 09 or 10 to 12

/
    date delimiter

(0[1-9]|[1-2][0-9]|3[0-1])
    day in range from 01 to 09, 10 to 29 or 30 to 31

/
    date delimiter

[1-9][0-9]{3}
    year in range from 1000 to 9999

space
    space, literally

(0[0-9]|1[0-2])
    hour in range from 00 to 09 or 10 to 12

:
    time delimiter

[0-5][0-9]
    seconds in range from 00 to 59

space
    space, again

(am|pm)
    the meridiem stuff you guys from US and UK like so much :P

$
    string has to end with the whole pattern

Note that the above pattern could still have you end up with invalid day ranges like 02/31/2018, that's why you should still check with isDate().