for循环不能按预期的javascript工作

时间:2014-11-13 02:38:45

标签: javascript

我有一个对象Object { 2014-01-30=[1], 2014-02-01=[1]}

和一个名为fechasPeriodo的数组,

那么为什么是以下代码:

fechasPeriodo = [];
            for(var property in SelectedDates) {
            fechasPeriodo.push(new Date(property));
            }

产生此结果[Date {Wed Jan 29 2014 18:00:00 GMT-0600}, Date {Fri Jan 31 2014 18:00:00 GMT-0600}]

编辑:我希望结果是2014年1月30日星期四等,2014年2月2日星期二。

实际上这只是一个问题,因为我正在尝试使用Google日历Feed在datepicker中定义一系列日期。所以下面的代码:

if(fechasPeriodo.length > 1) {
            r[1] = fechasPeriodo[0] <= date && date <= fechasPeriodo[1] ?"Highlighted"+SelectedDates[key][0].replace(/\s/g, "_"):"Highlighted-unknown";
            }

我希望突出1月30日到2月2日的范围。但是,如果你可以指导我为什么它不起作用,我会非常感激,我正在追随这个小提琴: http://jsfiddle.net/qaEuj/

冒着被再次投票的风险,我不得不说我仍然不明白为什么我上面的最后一段代码不像我提到的小提琴那样工作,所以这是我的完整代码:

    $(document).ready(function() {
    var fechaDefecto = new Date('2014/01/01');
    var fechaFin = new Date('2014/08/31');
    SelectedDates = null;

    /*SelectedDates[new Date('12/25/2014')] = new Date('12/25/2014');
    SelectedDates[new Date('12/12/2014')] = new Date('12/12/2014');
    SelectedDates[new Date('06/06/2014')] = new Date('06/06/2014');*/
    $('#tiposFechas').change(function() {
    $.getJSON("https://www.google.com/calendar/feeds/cide.edu_sm151i2pdhu2371vq8hamcver4@group.calendar.google.com/public/full?q="+encodeURI($(this).val()), {"alt" : "json"}, function(data) {
    SelectedDates = {};
    $.each(data.feed.entry, function(i, entry) {
    var key = entry.gd$when[0].startTime.substr(0, 10)
    var clave = entry.gd$when[0].endTime.substr(0, 10);
    if(key in SelectedDates === false || clave in SelectedDates === false) {
    SelectedDates[key] = [];
    SelectedDates[clave] = [];
    }
    SelectedDates[key].push(entry.title.$t);
    SelectedDates[clave].push(entry.title.$t);  
    });
    $('#cal').datepicker("refresh");
    });
    });

    $('#cal').datepicker(
    {
            beforeShowDay: function (date) {
            var r = [true, ""];
            if (SelectedDates === null) {
            r[1] = "Highlighted-unknown";
            }
                else {
                fechasPeriodo = [];
                for(var property in SelectedDates) {
                fechasPeriodo.push(new Date(property));
                //alert(property);
                }
                var key = $.datepicker.formatDate("yy-mm-dd", date);
                if(key in SelectedDates) {

                if(fechasPeriodo.length > 1) {
                r[1] = fechasPeriodo[0] <= date && date <= fechasPeriodo[1] ?"Highlighted"+SelectedDates[key][0].replace(/\s/g, "_"):"Highlighted-unknown";
                }
                else {
                r[1] = "Highlighted"+SelectedDates[key][0].replace(/\s/g, "_"); 
                }
                r[2] = SelectedDates[key].join(", ");
                }
            }
            return r;
}, 
        minDate : fechaDefecto,
        maxDate : fechaFin, 
        numberOfMonths: [3,3]   
    });
});

我希望有人指出一个原因,即使这是一个批评,因为它已经迟到了。

我必须说我试过这个: r[1] = new Date(fechasPeriodo[0].getYear(), fechasPeriodo[0].getMonth(), fechasPeriodo[0].getDate()) <= date && date <= new Date(fechasPeriodo[1].getYear(),fechasPeriodo[1].getMonth(),fechasPeriodo[1].getDate()) ?"Highlighted"+SelectedDates[key][0].replace(/\s/g, "_"):"Highlighted-unknown";

但也没有用。当我在行fechasPeriodo.push(new Date(property));中调用新日期以及我比较它们的方式时,我代表日期的方式可能有问题吗?

1 个答案:

答案 0 :(得分:2)

它只是UTC和非UTC表示之间的差异。

new Date('2014-01-30').toString(); //Wed Jan 29 2014 19:00:00
new Date('2014-01-30').toUTCString(); //Thu, 30 Jan 2014 00:00:00

尝试fechasPeriodo[0].toUTCString();,我非常确定它会返回您的期望。