2015-06-13 54 views
2

我一直在摔跤這一段時間,所以請伸出援助之手。完整的日曆時區瞬間js問題

我有一個實時多時區應用程序,使用信號R,所有日期時間存儲和使用UTC廣播,我想操縱他們的客戶端,以避免多個廣播不同的用戶,如果一個約會更新。

我試圖讓fullcalendar在適當的時區顯示用戶的日期,它不是基於瀏覽器,而是用戶登錄時保存的本地字符串。

這甚至有可能嗎?或者我需要存儲偏移量並按照這種方式進行(我希望避免這種情況)。我使用eventRender來操縱,但這是給我其他問題,並提出了一個錯誤。

我的代碼是:

$(document).ready(function() { 



    function renderCalendar() { 
     $('#calendar').fullCalendar({ 
      header: { 
       left: 'prev,next today', 
       center: 'title', 
       right: 'month,agendaWeek,agendaDay' 
      }, 
      editable: true, 
      timezone: "Europe/Istanbul", 
      eventLimit: true, // allow "more" link when too many events 
      events: [{"id":1026,"taskTypeId":4,"title":"(New Appointment)","start":"2015-06-11T11:00:00Z","end":"2015-06-11T12:00:00Z", "timezone":"UTC","allDay":false,"url":null,"location":"","people":null,"className":"event-appointment"}], 
      eventRender: function(event, el) { 


       if (event.start.hasZone()) { 
        el.find('.fc-title').after(
        $('<div class="tzo"/>').text(event.start.format('Z')) 
        ); 
       } 

      } 
     }); 
    } 

    renderCalendar(); 

}); 

回答

4

FullCalendar's time zone documentation解釋說,命名時區預計將在服務器上進行計算。雖然它支持帶時區的標記事件,但它不會在客戶端進行任何時區轉換。除非在未來版本中這種行爲發生變化,否則它不適合您所描述的情況。

但是,這並不意味着你卡住了。 FullCalendar取決於moment.js,並且有一個名爲moment-timezone的moment.js插件。它專門設計用於使用IANA時區標識符執行客戶端時區轉換,例如"Europe/Istanbul「您在示例中顯示的一個

當您從SignalR廣播接收到您的事件時,可以使用moment-timezone定期

  • 時區數據的變化,政府:從UTC將結果發送到FullCalendar事件對象之前轉換爲所需的區域

    var s = moment("2015-06-11T11:00:00Z").tz("Europe/Istanbul").format(); 
    // result: "2015-06-11T14:00:00+03:00" 
    

    一對夫婦的附加分。的世界改變了他們關於抵消和夏令時規則的想法。通過訂閱IANA Time Zone Announcements mailing list來保持更新。在IANA發佈的一週左右時間內預計任何時區庫的更新是合理的。

  • 由於您使用SignalR,我假設您的後端必須是.NET。 FullCalendar文檔顯示使用PHP作爲後端,它已經支持IANA時區。但是,在.NET中,您可以使用Noda Time來實現相同的功能。

+0

感謝馬特,我使用的那一刻時區來解決這個使用eventRender,不幸的是顯示了UTC時間,直到你改變看法,一旦第一次嘗試(我已經提出了這個與亞當·肖潛在的bug) 。今天我已經將我的代碼遷移到野田,這是最後一塊難題。我想我必須在完整的日曆得到客戶端或考慮發送多個廣播之前操縱日期。這個答案給我提出了另一個問題,我遇到了這樣一個問題。之後,我會分開提高。 – JGuymer