function format(timestamp: number): string {
const date = _Date(timestamp);
const month = date.getMonth() + 1
const day = date.getDate()
return `${date.getFullYear()}-${month < 10 ? `0${month}` : month}-${day < 10 ? `0${day}` : day}`
}
function _Date(ts: number | string): Date {
return new Date(ts);
}
function* dateRangeGenerator(start: string, end: string, step: number): Generator<string> {
const startTime = _Date(start).getTime();
const endTime = _Date(end).getTime();
const diffDays = ~~((endTime - startTime) / (1000 * 3600 * 24));
if (!diffDays) {
yield format(startTime);
return;
}
let i = 0, curDay = Number(start.slice(8));
while (i <= diffDays) {
yield format(_Date(start).setDate(curDay));
i += step;
curDay += step;
}
};
* const g = dateRangeGenerator('2023-04-01', '2023-04-04', 1);
* g.next().value; // '2023-04-01'
* g.next().value; // '2023-04-02'
* g.next().value; // '2023-04-03'
* g.next().value; // '2023-04-04'
* g.next().done; // true