对于在循环中无法按预期工作 JavaScript

for in loop not working as expected javascript

本文关键字:工作 JavaScript 循环      更新时间:2023-09-26

我有一个对象,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日星期四等,周日02 Feb 2014。

实际上,这只是一个问题,因为我正在尝试使用Google日历提要在日期选择器中定义日期范围。所以下面的代码:

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)); 行中调用新日期时,我表示日期的方式以及比较它们的方式是否存在问题?

这只是 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();,我很确定它会返回您所期望的。