Javascript for in-loop未按预期工作
我有一个对象,对象{2014-01-30=[1],2014-02-01=[1]} 还有一个叫做fechasPeriodo的数组 那么,为什么会出现以下代码:Javascript for in-loop未按预期工作,javascript,Javascript,我有一个对象,对象{2014-01-30=[1],2014-02-01=[1]} 还有一个叫做fechasPeriodo的数组 那么,为什么会出现以下代码: fechasPeriodo = []; for(var property in SelectedDates) { fechasPeriodo.push(new Date(property)); } if(fechasPeriodo.length > 1) {
fechasPeriodo = [];
for(var property in SelectedDates) {
fechasPeriodo.push(new Date(property));
}
if(fechasPeriodo.length > 1) {
r[1] = fechasPeriodo[0] <= date && date <= fechasPeriodo[1] ?"Highlighted"+SelectedDates[key][0].replace(/\s/g, "_"):"Highlighted-unknown";
}
产生此结果[日期{2014年1月29日星期三18:00:00 GMT-0600},日期{2014年1月31日星期五18:00:00 GMT-0600}]
编辑:我希望结果是2014年1月30日星期四等,2014年2月2日太阳
事实上,这是一个问题,因为我正试图使用Google日历提要在datepicker中定义一系列日期。因此,以下代码:
fechasPeriodo = [];
for(var property in SelectedDates) {
fechasPeriodo.push(new Date(property));
}
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日的范围。但如果你能告诉我为什么它不起作用,我将非常感激,我将遵循以下原则:
冒着再次被否决的风险,我不得不说,我仍然不明白为什么我上面的最后一段代码不能像我提到的小提琴一样工作,所以下面是我的完整代码:
$(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 DatefechasPeriodo[0]。getYear,fechasPeriodo[0]。getMonth,fechasPeriodo[0]。getDate这只是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]。ToutString;我很确定它会返回您所期望的结果。预期结果是什么?您的预期结果是什么?谢谢@torazaburo,但这没有起作用,我坚持原来的语法谢谢@plalx现在我可以看到更接近的结果[Thu,2014年1月30日00:00 GMT,Sat,2014年2月1日00:00 GMT]但我仍然感到困惑,因为应该为周期中的每个日期分配一个类的代码不起作用。有人知道为什么吗?我的意思是,它为数据包中的单元格的第一个和最后一个日期呈现CSS类,而不是中间的那些。就像我说的,我现在跟着的小提琴是一把工作小提琴example@gerardoflores这是因为你的日期现在是字符串。不要将它们转换为字符串。仅使用UTC表示法进行显示。是的,我意识到这一点,因此我将坚持使用原始日期对象,但奇怪的是,1月29日和31日之间的中间日期没有定义类。事实上,只有第一个日期得到了我所期望的类的定义。我再次提供了我提到的最新小提琴,在那里一切都正常工作