我正在使用优秀的(但很大的)DateJS库来处理我的webapp中的日期和时间。我刚刚遇到了一些我不确定如何处理的事情。
我希望我的用户能够只输入时间字符串,没有日期,但他们应该能够以任何方式输入它。例如:
使用Date.parse(value)
将这些字符串转换为完整日期,这正是我想要的。但是,它还允许用户输入日期字符串的任何其他部分,例如:
我正在尝试使用DateJS来验证时间值的输入字段。类似的东西:
function validateTime(value) {
return Date.parse(value) !== null;
}
有没有办法使用DateJS功能来解决这个问题?还有其他SO questions提供解决方案,但如果DateJS有办法做到这一点,我真的不想在我的应用程序中添加更多自定义代码来执行此操作。
答案 0 :(得分:9)
在问我的问题后不久,我发现Date.parseExact()可以采用一系列格式字符串。不知怎的,我错过了。我设法使用以下代码:
function validateTime(input) {
return Date.parseExact(input, [
"H:m",
"h:mt",
"h:m t",
"ht","h t"]) != null ||
Date.parseExact(input, [
"h:mtt",
"h:m tt",
"htt","h tt"]) != null;
};
请注意,某些格式似乎无法同时包含在一起,这就是我将它们拆分为两个单独的parseExact()调用的原因。在这种情况下,我不能在其中包含任何包含单个t
的字符串,其中包含格式字符串,其中包含一个双tt
。
答案 1 :(得分:5)
添加剂方法似乎很麻烦。在我看来,取消了DateJS的美丽。我需要相同的解决方案,并决定在使用DateJS解析之前偷偷地将日期添加到我的输入字符串前面:
var parsed = Date.parse(Date.today().toString('M/d/yyyy') + ' ' + this.value);
if (parsed) {
alert(parsed.toString('h:mm tt'));
}
现在,DateJS不会嗅到它的任何日期部分解析模式,因为你已经在其中加入了它。
希望这有助于某人!