2014-01-31 24 views
0

我從Google日曆XML中處理JSON日期時遇到問題。我提取了.startTime和.endTime &我使用jQuery格式化這些日期(+所有日期之間)爲YYYY-MM-DD。然後,我使用格式化的日期向我自己的日曆中匹配的唯一ID(#YYYY-MM-DD)的表單元添加背景顏色。它的工作正常,但是在這個過程中,日期變得不匹配。我下面的流程是:jQuery/JSON日期處理

  • 在谷歌日曆Enter事件。對於我的測試活動,我使用了25日 - 27日 2014年3月(全日事件打勾)。
  • 提取XML JSON數據:"gd$when": [{"endTime": "2014-03-28", "startTime": "2014-03-25"

(所以我已經很困惑,因爲JSON具有添加到我的活動結束日期多一天 - 爲什麼?)

  • 使用jQuery的下面將格式化的日期分配給我自己的Cal的ID。 (感謝@Ezequiel,他幫助我獲得了這麼多 - 我對jQuery不太瞭解)。

    function GCalEvents() { 
    
    var calendar_json_url = "https://www.google.com/calendar/feeds/my_email%40googlemail.com/public/full?orderby=starttime&sortorder=ascending&max-results=60&futureevents=true&alt=json" 
    
        // Get list of upcoming events formatted in JSON 
        jQuery.getJSON(calendar_json_url, function(data){ 
    
        // Parse and render each event 
        jQuery.each(data.feed.entry, function(i, item){ 
    
         var formatInt = function (i) { 
          if (i < 10) return "0" + i; 
          return i; 
         }; 
         var format = function (d) { 
          var date = d.getDate(); 
          var month = d.getMonth() + 1; 
          var year = d.getFullYear(); 
          return year + "-" + formatInt(month) + "-" + formatInt(date); 
         }; 
         var getDates = function (start, theend) { 
          var current = new Date(start); 
          var finish = new Date(theend); 
          var result = []; 
    
         do { 
          current.setDate(current.getDate() + 1); 
          result.push(format(current)); 
         } while (current < finish); 
    
          return result; 
         }; 
    
         // Apply background to dates. 
         var start = item.gd$when[0].startTime; 
         var theend = item.gd$when[0].endTime; 
    
         var dates = getDates(start, theend).map(function toId(date) { return "#" + date }).join(","); 
         jQuery(dates).removeClass('date-cell').addClass('date-selected'); 
    
         }); 
         }); 
    
    } 
    
  • 檢查日曆,並有彩色26日,27日,28日三月的背景 - 所以最終的效果是,它已經改變了我的整個原克卡事件向前一天,相對於JSON有正確的結束日期,但錯誤的開始日期!顯然,我只是想要顯示正確的GCal日期。

事情我已經嘗試:

  • var date = d.getDate() -1 ; - 但是,這會導致該月的最後一天的問題。
    • 有沒有其他的jQuery功能干擾。
    • 我自己的日曆表格單元ID正在生成。

它是否與時區有關?

我會很感激任何人可以給的幫助。

回答

0

從我在「提取的XML JSON數據」中可以看到的內容,它只是結束日期已更改。而我之前見過。我相信這與你將事件定爲一整天事件有關。然後在第二天的午夜結束。這與它如何表現(本例中爲JSON)無關,而與Google如何存儲它無關。

如果您創建一個「正常」事件(不是全天),您應該得到您期望的日期。

+0

感謝您的幫助。將事件設置爲「正常」會糾正結束日期。你有什麼想法,爲什麼開始日期是錯誤的? (對不起,如果我在OP中使用了錯誤的術語,JSON對我來說是一個新領域)。 – theflyingant

+0

我沒有嘗試過,但它可能是'current.setDate(current.getDate()+ 1);'我看到'do'的主體。特別是'+ 1'。 – fredrik