10

我正在使用优秀(但很大)的DateJS库来处理我的 web 应用程序中的日期和时间。我刚刚遇到了一些我不知道如何处理的事情。

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

  • 5:00 PM
  • 17:00
  • 5:00 PM
  • 下午 5:00
  • 5便士
  • 等等

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

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

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

function validateTime(value) {
    return Date.parse(value) !== null;
}

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

4

2 回答 2

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;
};

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

于 2010-10-25T08:32:46.367 回答
5

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

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

if (parsed) {
  alert(parsed.toString('h:mm tt'));
}

现在 DateJS 不会嗅探它的任何日期部分解析模式,因为您已经将它替换了。

希望这对某人有帮助!

于 2013-05-07T17:58:59.157 回答