仅使用DateJS解析时间字符串

Tau*_*ren 10 javascript time datetime date datejs

我正在使用优秀(但很大)的DateJS库来处理我的webapp中的日期和时间.我刚刚遇到了一些我不确定如何处理的事情.

我希望我的用户只能输入时间字符串,没有日期,但他们应该能够以任何方式输入它.例如:

  • 5:00 PM
  • 17:00
  • 5:00 PM
  • 5:00P
  • 5P
  • 等等

使用Date.parse(value)将这些字符串转换为完整日期,这正是我想要的.但是,它还允许用户输入日期字符串的任何其他部分,例如:

  • 下午5点
  • 2010年1月1日下午5点
  • 等等

我正在尝试使用DateJS来验证时间值的输入字段.就像是:

function validateTime(value) {
    return Date.parse(value) !== null;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法使用DateJS功能来解决这个问题?还有其他提出解决方案的SO问题,但如果DateJS有办法做到这一点,我真的不想在我的应用程序中添加更多自定义代码来执行此操作.

Tau*_*ren 10

在问我的问题后不久,我发现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;
};
Run Code Online (Sandbox Code Playgroud)

请注意,某些格式似乎无法同时包含在一起,这就是为什么我将它们分成两个单独的parseExact()调用.在这种情况下,我不能包含任何包含单个t字符串的字符串,其中包含一个double的格式字符串tt.


doo*_*eyo 5

添加剂方法似乎很麻烦.在我看来,取消了DateJS的美丽.我需要相同的解决方案,并决定在使用DateJS解析之前偷偷地将日期添加到输入字符串前面:

var parsed = Date.parse(Date.today().toString('M/d/yyyy') + ' ' + this.value);

if (parsed) {
  alert(parsed.toString('h:mm tt'));
}
Run Code Online (Sandbox Code Playgroud)

现在,DateJS不会嗅探它的任何日期部分解析模式,因为你已经在它中加入了它.

希望这有助于某人!