我想创建一个从2014/0/1到2020/11/31开始的日期列表(日期用JavaScript表示)。
这是代码
var initialTime = new Date(2014, 0, 1);
var endTime = new Date( 2050, 11, 31);
var arrTime = [];
arrTime.push(initialTime);
if( initialTime < endTime) {
for( var q = initialTime; q <= endTime; q.setDate(q.getDate() + 1)) {
arrTime.push(q);
}
}
document.querySelector("#Time").innerHTML = arrTime;
这是代码返回的内容。这只是一个&#34; Sun Jan 01 2051 00:00:00 GMT-0500(EST)。&#34;我该如何纠正?
答案 0 :(得分:2)
执行q.setTime( ... )
时,您正在修改Date
对象本身。您在每次迭代时将同一个对象推入数组,因此修改它会修改整个数组。
如果您只想要日期的字符串表示,您可以这样做:
let initialTime = new Date("2018-03-09Z08:00:00")
,endTime = new Date("2018-03-14Z08:00:00")
,arrTime = []
;
for (let q = initialTime; q <= endTime; q.setDate(q.getDate() + 1)) {
arrTime.push(q.toString());
}
console.log(arrTime);
&#13;
或者,如果您想拥有一组实际的Date
个实例:
let initialTime = new Date("2018-03-09Z08:00:00")
,endTime = new Date("2018-03-14Z08:00:00")
,arrTime = []
,dayMillisec = 24 * 60 * 60 * 1000
;
for (let q = initialTime; q <= endTime; q = new Date(q.getTime() + dayMillisec)) {
arrTime.push(q);
}
console.log(arrTime);
&#13;
答案 1 :(得分:1)
您正在向阵列推送相同的内存引用,因此您所做的更改会影响所有这些内容。
尝试:
var copiedDate = new Date(q.getTime());
arrTime.push(copiedDate);
这样你总是推动一个新对象。
答案 2 :(得分:1)
首先,您无法使用==
第二个问题是,每次将一个Date对象推送到数组ex时,您需要创建一个新的Date对象。 .push(new Date(q.getTime())
下一个问题是,在您推入数组之前,每次都没有正确地添加一天到最后一天
做类似
的事情伪代码---
var dates = [];
while( firstDate < secondDate ){
// this line modifies the original firstDate reference which you want to make the while loop work
firstDate.setDate(firstDate.getDate() + 1);
// this pushes a new date , if you were to push firstDate then you will keep updating every item in the array
dates.push(new Date(firstDate);
}
答案 3 :(得分:1)
var resolution = 1000, // Number of dates to capture between start and end
results = [], // will be populated with the for loop
start = Date.now(), // Set to whatever you want
end = start + (1000 * 60 * 60 * 24), // Set to what ever you want
delta = end - start
for (let i = 0; i < resolution; i++) {
let t = (delta / resolution) * i
results.push(new Date(start + t))
}
console.log(results)