2014-01-31 21 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