From d27c9e55900d9d64ce7ddece68bb5df20f847220 Mon Sep 17 00:00:00 2001 From: Isabelle Viktoria Maciohsek Date: Sun, 20 Jun 2021 12:39:16 +0300 Subject: [PATCH] Create dateRangeGenerator.md --- snippets/dateRangeGenerator.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 snippets/dateRangeGenerator.md diff --git a/snippets/dateRangeGenerator.md b/snippets/dateRangeGenerator.md new file mode 100644 index 000000000..ed5bef748 --- /dev/null +++ b/snippets/dateRangeGenerator.md @@ -0,0 +1,26 @@ +--- +title: dateRangeGenerator +tags: date,function,generator,advanced +firstSeen: 2021-06-21T05:00:00-04:00 +--- + +Creates a generator, that generates all dates in the given range using the given step. + +- Use a `while` loop to iterate from `start` to `end`, using `yield` to return each date in the range, using the `Date` constructor. +- Use `Date.prototype.getDate()` and `Date.prototype.setDate()` to increment by `step` days after returning each subsequent value. +- Omit the third argument, `step`, to use a default value of `1`. + +```js +const dateRangeGenerator = function* (start, end, step = 1) { + let d = start; + while (d < end) { + yield new Date(d); + d.setDate(d.getDate() + step); + } +}; +``` + +```js +[...dateRangeGenerator(new Date('2021-06-01'), new Date('2021-06-04'))]; +// [ 2021-06-01, 2021-06-02, 2021-06-03 ] +```