2017-04-07 49 views
0

我正在使用FullCalendar並需要將當前時間添加到select回調函數中的模糊日期時刻。使用momentjs將模糊日期添加到當前時間

在月視圖中選擇一天時,回調函數參數「開始」和「結束」返回模糊日期(無時間)的時刻。我用以下爲當前時間添加到日期,然後將其轉換回了一下,但不知道這是否是做了正確的方法...

if(!start.hasTime()){ 
    start = moment(start.format('YYYY-MM-DD'+' '+ moment().format('HH:mm:ss'))); 
     end = moment( end.format('YYYY-MM-DD'+' '+ moment().format('HH:mm:ss'))); 
} 

正如你所看到的,我將「開始」和「結束」日期和當前時刻轉換爲字符串,然後將連接的字符串轉換爲片刻。

我想確保我創建的時刻採用有效的ISO 8601格式。

謝謝, 任何幫助,將不勝感激。

回答

1

official docs中說如果您撥打format()函數,您將獲得ISO 8601格式的日期。此外jsfiddle

,如果你不想來處理時區,你可以使用utc()method

0

我有同樣的問題,奇怪的是,當我升級到V3.40 fullcalendar: 檢查了這一點。根據fullcalendar docs, ,format()toISOString函數已在fullcalendar內被覆蓋,用於模糊地計時的時刻僅返回日期,即'2017-03-06'。爲了克服這個問題並設定一個時間,你需要創建一個新的時刻對象,這就是你所做的。爲了確保跨瀏覽器的一致性分析,您應該按照moment docs的建議指定您正在解析的格式。因此,對於你的情況,這將是:

if(!start.hasTime()){ 
     var format = 'YYYY-MM-DD HH:mm:ss'; 
     start = moment(start.format('YYYY-MM-DD'+' '+ moment().format('HH:mm:ss')), format); 
     end = moment( end.format('YYYY-MM-DD'+' '+ moment().format('HH:mm:ss')), format); 
    } 

爲了使代碼更清潔,簡單易讀,雖然,你可以創建一個使用UNIX時間戳(這是一個數字,不依賴於字符串格式)的新時刻start時刻和使用時刻set功能設置時間。所以,現在看起來是這樣的:

if(!start.hasTime()){ 
     var timestamp = start.valueOf(); 
     var now = moment(); 
     var startMomentWithNowTime = moment(timestamp).set({ 
      'hour': now.hour(), 
      'minute': now.minute(), 
      'second': now.second() 
     }); 
     start = startMomentWithNowTime; 
     end = startMomentWithNowTime; 
    } 

藉口描述性的變量命名startMomentWithNowTime。還有幾行,但希望更容易閱讀。您也可以將此邏輯封裝在一個函數中以便按需使用。希望能幫助到你!