So I need to calculate a set of time intervals like this: [8:00 - 8:10]
I decided to use a Date type for this and wrote this piece of code to test things:
let todaysDate = new Date();
let startTime: Date = new Date(todaysDate.setHours(5, 0, 0));
let endTime: Date = new Date(todaysDate.setHours(6, 0, 0));
let start : number = startTime.getTime();
let interval: number = 600000;
let firstTime = new Date(startTime.getTime());
let secondTime = new Date(startTime.getTime() + interval);
let timeIntervalsArray: Date[][] = [];
while (secondTime.getTime() < endTime.getTime()) {
firstTime.setTime(start);
secondTime.setTime(firstTime.getTime() + interval);
const times: Date[] = [firstTime, secondTime];
timeIntervalsArray.push(times);
start += interval;
}
console.log(timeIntervalsArray);
But when logging the timeIntervalsArray variable I get that all variables in array are the same:
[LOG]:
[[Date: "2023-04-22T05:50:00.722Z", Date: "2023-04-22T06:00:00.722Z"],
[Date: "2023-04-22T05:50:00.722Z", Date: "2023-04-22T06:00:00.722Z"],
[Date: "2023-04-22T05:50:00.722Z", Date: "2023-04-22T06:00:00.722Z"],
[Date: "2023-04-22T05:50:00.722Z", Date: "2023-04-22T06:00:00.722Z"],
[Date: "2023-04-22T05:50:00.722Z", Date: "2023-04-22T06:00:00.722Z"],
[Date: "2023-04-22T05:50:00.722Z", Date: "2023-04-22T06:00:00.722Z"]]
I managed to fix this behavior by changing this line: const times: Date[] = [firstTime, secondTime];
to this: const times: Date[] = [new Date(firstTime), new Date(secondTime)];
But I don't understand how this works, as if I log as such:
while (secondTime.getTime() < endTime.getTime()) {
firstTime.setTime(start);
secondTime.setTime(firstTime.getTime() + interval);
//Logging firstTime
console.log(firstTime);
console.log('As new date', new Date(firstTime));
//
const times: Date[] = [firstTime, secondTime];
timeIntervalsArray.push(times);
start += interval;
}
I get the same Data object:
[LOG]: Date: "2023-04-22T05:00:00.718Z"
[LOG]: "As new date", Date: "2023-04-22T05:00:00.718Z"
What is more odd - when logging the timeIntervalsArray itself:
while (secondTime.getTime() < endTime.getTime()) {
firstTime.setTime(start);
secondTime.setTime(firstTime.getTime() + interval);
//Logging timeInterval
console.log(timeIntervalsArray);
//
const times: Date[] = [firstTime, secondTime];
timeIntervalsArray.push(times);
start += interval;
}
Fist iteration : [LOG]: [] -> array is empty
Second iteration :
[LOG]: [[Date: "2023-04-22T05:10:00.241Z", Date: "2023-04-22T05:20:00.241Z"]]
-> array has one element - [Date: "2023-04-22T05:10:00.241Z", Date: "2023-04-22T05:20:00.241Z"]
Third iteration :
[LOG]: [[Date: "2023-04-22T05:20:00.241Z", Date: "2023-04-22T05:30:00.241Z"],
[Date: "2023-04-22T05:20:00.241Z", Date: "2023-04-22T05:30:00.241Z"]]
-> the fist element has been changed to
[Date: "2023-04-22T05:20:00.241Z", Date: "2023-04-22T05:30:00.241Z"]
but it was
[Date: "2023-04-22T05:10:00.241Z", Date: "2023-04-22T05:20:00.241Z"]
Can somebody explain this behavior because I am out of ideas...
Via Active questions tagged javascript - Stack Overflow https://ift.tt/C9h0mg1
Comments
Post a Comment