代码之家  ›  专栏  ›  技术社区  ›  Tauren

仅分析日期为js的时间字符串

  •  9
  • Tauren  · 技术社区  · 14 年前

    我用的是最好的(但大的) DateJS

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

    • 17: 00个
    • 5: 下午0点
    • 5: 00便士
    • 等。

    使用 Date.parse(value)

    • 周六下午5点
    • 2010年1月1日下午5点

    我试图使用DateJS验证输入字段的时间值。类似于:

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

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

    2 回复  |  直到 8 年前
        1
  •  10
  •   Tauren    14 年前

    问完问题后不久,我发现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 在里面。

        2
  •  5
  •   dooleyo    12 年前

    加法方法似乎很麻烦。带走了我眼中的约会之美。我需要同样的解决方案,决定在使用DateJS进行解析之前,偷偷地在输入字符串前面附加日期:

    var parsed = Date.parse(Date.today().toString('M/d/yyyy') + ' ' + this.value);
    
    if (parsed) {
      alert(parsed.toString('h:mm tt'));
    }
    

    现在,DateJS将不会到处寻找它的任何日期部分解析模式,因为您已经将它放入子目录中。

    希望这能帮助别人!

    推荐文章