Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery/JSON日期处理_Jquery_Json_Date_Datetime_Getdate - Fatal编程技术网

jQuery/JSON日期处理

jQuery/JSON日期处理,jquery,json,date,datetime,getdate,Jquery,Json,Date,Datetime,Getdate,我在处理Google日历XML中的JSON日期时遇到问题。我提取了.startTime和.endTime&我使用jQuery将这些日期(+之间的所有日期)格式化为YYYY-MM-DD。然后我使用格式化的日期将背景色添加到我自己日历中匹配的唯一ID(#YYYY-MM-DD)的表格单元格中。它工作正常,但在某个时候,日期变得不匹配。我遵循的过程是: 在谷歌日历上输入事件。对于我的测试活动,我使用了第25-27次 2014年3月(全天活动已勾选) 提取的XML JSON数据:“gd$when”:[{

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

  • 在谷歌日历上输入事件。对于我的测试活动,我使用了第25-27次 2014年3月(全天活动已勾选)
  • 提取的XML JSON数据:
    “gd$when”:[{“endTime”:“2014-03-28”,
    “开始时间”:“2014-03-25”
(所以我已经很困惑了,因为JSON在我活动的结束日期上增加了一天——为什么?)

  • 使用下面的jQuery将格式化日期分配给我自己的Cal ID(感谢@Ezequiel帮助我走到了这一步——我不擅长jQuery)

    函数GCalEvents(){
    var calendar_json_url=”https://www.google.com/calendar/feeds/my_email%40googlemail.com/public/full?orderby=starttime&sortorder=ascending&max-结果=60&futureevents=true&alt=json“
    //获取JSON格式的即将发生的事件列表
    getJSON(日历、json、url、函数(数据){
    //解析并呈现每个事件
    jQuery.each(data.feed.entry,function(i,item){
    var formatInt=函数(i){
    如果(i<10)返回“0”+i;
    返回i;
    };
    变量格式=函数(d){
    var date=d.getDate();
    变量月份=d.getMonth()+1;
    var year=d.getFullYear();
    返回年份+“-”+formatInt(月)+“-”+formatInt(日期);
    };
    var getDates=函数(开始、结束){
    var当前=新日期(开始);
    var完成=新日期(结束);
    var结果=[];
    做{
    current.setDate(current.getDate()+1);
    结果.推送(格式(当前));
    }而(电流<完成);
    返回结果;
    };
    //将背景应用于日期。
    var start=item.gd$when[0].startTime;
    var theend=item.gd$when[0].endTime;
    var dates=getDates(start,theend).map(函数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正在正确生成
它与时区有关吗


我非常感谢任何人能给予我的帮助。

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


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

谢谢你的帮助。将事件设置为“正常”会更正结束日期。你知道开始日期错误的原因吗?(对不起,如果我在OP中使用了错误的行话,JSON对我来说是一个新领域)。我没有尝试过,但它可能是
current.setDate(current.getDate()+1);
我在
do
的主体中看到的。具体来说是
+1
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');

        });
      });

}