2010-10-25 17 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