Welcome to Subscribe On Youtube
2777. Date Range Generator
Description
Given a start date start
, an end date end
, and a positive integer step
, return a generator object that yields dates in the range from start
to end
inclusive. All dates are in the string format YYYY-MM-DD
. The value of step
indicates the number of days between consecutive yielded values.
Example 1:
Input: start = "2023-04-01", end = "2023-04-04", step = 1 Output: ["2023-04-01","2023-04-02","2023-04-03","2023-04-04"] Explanation: const g = dateRangeGenerator(start, end, step); g.next().value // '2023-04-01' g.next().value // '2023-04-02' g.next().value // '2023-04-03' g.next().value // '2023-04-04'
Example 2:
Input: start = "2023-04-10", end = "2023-04-20", step = 3 Output: ["2023-04-10","2023-04-13","2023-04-16","2023-04-19"] Explanation: const g = dateRangeGenerator(start, end, step); g.next().value // '2023-04-10' g.next().value // '2023-04-13' g.next().value // '2023-04-16' g.next().value // '2023-04-19'
Example 3:
Input: start = "2023-04-10", end = "2023-04-10", step = 1 Output: ["2023-04-10"] Explanation: const g = dateRangeGenerator(start, end, step); g.next().value // '2023-04-10'
Constraints:
new Date(start) <= new Date(end)
0 <= The difference in days between the start date and the end date <= 1000
1 <= step <= 100
Solutions
-
function* dateRangeGenerator(start: string, end: string, step: number): Generator<string> { const startDate = new Date(start); const endDate = new Date(end); let currentDate = startDate; while (currentDate <= endDate) { yield currentDate.toISOString().slice(0, 10); currentDate.setDate(currentDate.getDate() + 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 */