2010-10-25 18 views
9

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

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

  • 下午5:00
  • 17:00
  • 下午5:00
  • 5:00P
  • 5P

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

  • 坐下午5点
  • 1/1/2010下午5点

我m试图使用DateJS来验证输入字段的时间值。就像:

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

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

回答

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

同样使用''HHmm''模式来允许24小时表示(又名军事时间或天文时间)。 – JustinStolle 2012-02-13 10:03:27

5

添加剂方法看起来很麻烦。在我看来,带走DateJS的美丽。我需要相同的解决方案,并决定与DateJS解析之前只是悄悄追加在我的输入字符串前面日期:

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

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

现在DateJS不会被嗅探周围任何的它的日期部分的解析模式,为你已经打入它了。

希望这可以帮助别人!

+1

不错的想法,比我提出的解决方案简单得多!而且很明显......让我感到沮丧,我没有想到它;) – Tauren 2013-05-09 07:23:32