I was using this example to create a calendar in angular. But I realized today that when DST Ends the date is repeated and then the days are off by one from then on.
Look at the stackblitz. November 7 is repeated. stackblitz link to calendar
This is the code that generates the calendar days. How do I adjust this so that DST doesn't mess everything up?
private getCalendarDays(date = new Date) {
var startDate;
startDate = this.getCalendarStartDay(date).getTime();
const calendarStartTime = startDate;
return this.range(0, 41)
.map(num => new Date(calendarStartTime DAY_MS * num));
}
private getCalendarStartDay(date = new Date) {
const [year, month] = [date.getFullYear(), date.getMonth()];
const firstDayOfMonth = new Date(year, month, 1).getTime();
return this.range(1,7)
.map(num => new Date(firstDayOfMonth - DAY_MS * num))
.find(dt => dt.getDay() === 0)
}
private range(start, end, length = end - start 1) {
return Array.from({ length }, (_, i) => start i)
}
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" frameborder="0"></iframe>
CodePudding user response:
I'm not pretty sure but I imagine you can get the dates at 12 a.m. to avoid the problem
private getCalendarStartDay(date = new Date) {
const [year, month] = [date.getFullYear(), date.getMonth()];
//see that I indicate the 1 of the month at 12:00:00
const firstDayOfMonth = new Date(year, month,1,12,0,0,0).getTime();
//well the range from 0 to 6
return this.range(0,6)
.map(num => new Date(firstDayOfMonth - DAY_MS * num))
.find(dt => dt.getDay() === 0)
}
NOTE: I got your error in october, not in november