gpt4 book ai didi

Javascript - 在两个日期对象之间创建数组

转载 作者:行者123 更新时间:2023-11-28 15:19:42 29 4
gpt4 key购买 nike

问题

我正在尝试在两个 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 中重复存储同一对象。相反,请复制日期:

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;
}

(也没有理由在函数声明的末尾放置 ;。)

关于Javascript - 在两个日期对象之间创建数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32040680/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com