【问题标题】:jQuery/JSON date handlingjQuery/JSON 日期处理
【发布时间】:2014-01-31 09:16:07
【问题描述】:

我在处理来自 Google 日历 XML 的 JSON 日期时遇到问题。我已经提取了 .startTime 和 .endTime 并且我使用 jQuery 将这些日期(+ 之间的所有日期)格式化为 YYYY-MM-DD。然后,我使用格式化的日期将背景颜色添加到我自己日历中匹配的唯一 ID (#YYYY-MM-DD) 的表格单元格中。它工作正常,但在某个地方日期变得不匹配。我正在关注的过程是:

  • 在 Google 日历上输入活动。对于我的测试活动,我使用了 25th-27th 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');
    
            });
          });
    
    }
    
  • 检查日历,它已经为 3 月 26 日、27 日、28 日 的背景着色 - 所以最终效果是将我的整个原始 GCal 事件向前移动了一天,并且就 JSON 而言,它的结束日期正确,但开始日期错误!显然我只想显示正确的 GCal 日期。

我尝试过的事情:

  • var date = d.getDate() -1 ; - 但这会导致当月最后一天出现问题。
    • 没有其他 jQuery 函数干扰。
    • 我自己的日历的表格单元格 ID 生成正确。

与时区有关吗?

如果有人能提供任何帮助,我将不胜感激。

【问题讨论】:

    标签: jquery json date datetime getdate


    【解决方案1】:

    从我在您的“提取的 XML JSON 数据”中可以看到,只有结束日期发生了变化。我以前见过。我相信这与您将活动设置为全天活动有关。然后在第二天的午夜结束。这与它的表示方式(在本例中为 JSON)无关,而是与 Google 存储它的方式有关。

    如果你创建一个“正常”事件(不是全天),你应该得到你期望的日期。

    【讨论】:

    • 感谢您的帮助。将事件设置为“正常”会更正结束日期。你知道为什么开始日期是错误的吗? (对不起,如果我在我的 OP 中使用了错误的术语,JSON 对我来说是新领域)。
    • 我没试过,但它可能是我在do 正文中看到的current.setDate(current.getDate() + 1);。特别是+1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    相关资源
    最近更新 更多