[英]Javascript - create array between two date objects
我试图在两个JS对象之间建立一个数组。 看来我的对象是正确创建的,实际上下面的代码正在运行。
意外的行为是输出数组中的每个对象都在进行转换以匹配我循环经过的最后一个日期。 也就是说,如果我循环播放,无论我的todate_dateobj
是什么,我都会得到一个仅包含该值的整个数组。
我必须对实际的开始/结束日期正确进行一些调试,但是我可以处理-我受阻的是上述行为。
我对javascript很陌生。 我想这是突变的问题吗? 任何指导将不胜感激。
我离开控制台日志只是因为为什么要将它们取出?
function build_dateobjs_array(fromdate_dateobj, todate_dateobj) {
// return an array of dateojects from fromdate to todate
var current_date = fromdate_dateobj;
var return_array = []
while (current_date <= todate_dateobj) {
return_array[return_array.length] = current_date; // I have read that this is generally faster that arr.push()
var tomorrow = new Date(current_date.getTime() + 86400000);
console.log('tomorrow: ', tomorrow);
current_date.setTime(tomorrow);
console.log('current_date: ', current_date)
console.log("build_dateobjs_array : ", return_array);
};
return return_array;
};
Date
对象是可变的。 这行:
current_date.setTime(tomorrow);
...更改current_date
引用的Date
对象的状态,您永远都不会更改。
因此,您将相同的对象重复存储在return_array
。 相反,请复制Date
:
return_array[return_array.length] = new Date(+current_date);
另外,最好改变一下
var current_date = fromdate_dateobj;
至
var current_date = new Date(+fromdate_dateobj);
因此您不需要修改传递的Date
。
旁注:不需要往返毫秒,只需:
function build_dateobjs_array(fromdate_dateobj, todate_dateobj) {
// return an array of dateojects from fromdate to todate
var current_date = new Date(+fromdate_dateobj);
var return_array = [];
while (current_date <= todate_dateobj) {
return_array[return_array.length] = new Date(+current_date);
current_date.setDate(current_date.getDate() + 1);
};
return return_array;
}
(也没有理由在函数声明的末尾添加;
。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.