2016-11-18 24 views
1

我試圖插入選定的事件到數據庫,我注意到我選擇日曆不同於傳遞給AJAX。 select回調通過具有與日曆不同的時區的「開始」和「結束」日期。FullCalendar JS - 選擇回調傳遞開始和結束日期在錯誤的時區

我的日曆設置:

$calendar.fullCalendar({ 
    header: { 
     left: 'prev, today, next', 
     center: 'title', 
     right: 'agendaWeek, agendaDay' 
    }, 
    timezone: 'Australia/Sydney', 
    defaultView: 'agendaWeek', 
    selectable: true, 
    selectHelper: true, 
    select: function(start, end) { 
     var startDate = new Date(start); 
     var endDate = new Date(end); 
     console.log(startDate); 
     console.log(startDate); 

     // ajax to insert event to DB 

    }, 
    // other configurations 
}); 

現在我甩startDateendDate樣子:

Mon Nov 14 2016 08:00:00 GMT+0100 

這是不是Australia/Sydney該日曆設置爲,所以我節省了錯誤的開始日期和結束日期在DB中。我有點覺得這是new Date()的問題,它產生給定的時間戳與默認時區,而不是日曆設置爲。

任何人都知道解決方案?

+0

您可能需要使用UTC調整爲任何不同的區域:http://www.techrepublic.com/article/convert-the-local -time-to-another-time-zone-with-this-javascript/- 你也可以看看http://momentjs.com/timezone/ – webdad3

回答

0

開始和結束日期爲moment對象。它們不再處於當前時區,因此您必須克隆該對象,應用時區並添加偏移差異。

select: function(start, end) { 
    var startClone = start.clone(); 
    startClone.tz('Australia/Sydney'); 
    startClone.add(start.utcOffset() - startClone.utcOffset(), 'minutes'); 
    console.log(startDate.format()); 
} 
+0

我試着運行這個:'moment(start).tz('澳大利亞/悉尼')。format()'現在如果我從7:00到8:00選擇它不是那個時刻將時區分配給這個小時,而是將該時區轉換爲7:00,該時區是18:00。我需要的是7點將是'澳大利亞/悉尼'時區 –

+0

我發現如何轉移時間在這裏:http://stackoverflow.com/questions/28593304/same-date-in-different-time-zone/28615654# 28615654如果你更新了你的答案,我會標記爲正確的,因爲你給了我時刻的工作路徑。 –

+0

我已經更新了答案來計算偏移量。很高興你能弄明白。 – fanfavorite

0

問題出在使用new Date()。而不考慮您在應用程序中運行的時區或用戶在配置文件中設置的時區(如果它適用於您的情況),默認情況下,該程序在運行應用程序的瀏覽器時區上運行。

對於多應用程序時區,momentmoment-timezone是最好的選擇

相關問題