2014-01-16 26 views
5

我試圖確定一個時刻對象是否被時間值(除了日期)實例化。例如:檢查一下時間是否包含時間?

var date = moment("2014-01-16"); 
date.format("h:mm a"); // 12:00 am 

var date2 = moment("2014-01-16 09:30"); 
date.format("h:mm a"); // 9:30 am 

如何請問date如果它包含一個時間(而不僅僅是默認值)?

+1

存在使用一種變通方法爲這個項目的問題。作爲一個例子,請參閱Fullcalendar節點模塊:http://fullcalendar.io/docs/utilities/Moment/#ambiguously-timed – nyi

回答

4

從技術上講,只傳遞一個日期的構造函數會在一個時間點12:00:00進行實例化,即使它是隱式的。即便如此,這裏有一些可能的解決方案。

從最安全和最不工作,最安全,最工作:

1)檢查,如果它恰好等於12:00:00,並假設它沒有設置。糟糕的做法,如果你的用例經常在午夜發生。

2)不要在沒有明確指定時間的情況下實例化一個時刻。

3)環繞在時刻自定義對象,或創建一個全新的自定義對象,能夠表示空時間的情況下(一個標誌,可爲空變量等)

+0

感謝丹,我目前正在使用方法1,但我正在尋找更強大的方法。我不確定我想要創建一個自定義對象,因爲我不確定我想要解決所有可能的日期時間輸入的解析時間的邊緣情況......並且我寧願午夜是可接受的價值如果可能。即使不常見。 – Billy

+0

我會使用3a:一個時間包裝。它有兩個成員,一個時刻和一個bool nullTime。構造函數只需做足夠的解析來確定輸入是否包含時間,如果不包含,則將nullTime標誌設置爲true。 – Dan

+1

所以我想我要做的是使用方法1,但是然後檢查保存傳遞給構造函數的值的'moment._i'的值。如果該值包含00:00:00,那麼顯式傳遞該值,否則它由時刻的構造函數設置。這種方法對於'var d = moment()'構造的時刻不起作用,但在這種情況下不適用。任何理由,這將是一個壞主意? – Billy

相關問題