Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Day skipping fix breaks calculation on DST start #142

Closed
egfx-notifications opened this issue Oct 26, 2022 · 3 comments
Closed

Day skipping fix breaks calculation on DST start #142

egfx-notifications opened this issue Oct 26, 2022 · 3 comments

Comments

@egfx-notifications
Copy link
Contributor

I was trying to figure out what changes have been made to croner before updating to the current release. I read f8b2d3e and got the impression that you rely on the difference between the local timezone and the provided one to get the next valid time. Assuming that I understood this correctly I figured that there would still be an issue if the local and target timezone start and end daylight saving time at the same time or if you just explicitly state your local timezone.
To verify my assumption I wrote the following test:

	test("0 30 2 * * * with 365 iterations should return 365 days from now in Europe/Berlin", function () {
		let scheduler = new Cron("0 30 2 * * *", { timezone: "Europe/Berlin" }),
			prevRun = new Date(),
			nextRun,
			iterations = 365,
			compareDay = new Date();
			
		compareDay.setDate(compareDay.getDate() + iterations );
		
		while(iterations-->0) {
			nextRun = scheduler.next(prevRun),
			prevRun = nextRun;
			console.log(nextRun.toLocaleString("en-US"));
		}

		// Set seconds, minutes and hours to 00:00:00
		compareDay.setMilliseconds(0);
		compareDay.setSeconds(0);
		compareDay.setMinutes(0);
		compareDay.setHours(0);

		// Do comparison
		assert.equal(Math.abs(nextRun.getTime()-compareDay.getTime())<13*60*60*1000, true);

	});

And I also ran this with 0 30 2 * * * and Europe/Budapest as well as 0 30 1 * * * and Europe/London. Since I'm based in Germany all of those tests failed for me, to reproduce you'd have to find a timezone matching your local one and specify the correct time that would be skipped on a DST change.

The tests produce the following output at croner v4.4.0

~/p/croner ((4.4.0)) > npm run test

> croner@4.4.0 test
> uvu test test.croner.js

node/js/test.croner.js
• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 10/27/2022, 2:30:00 AM
10/28/2022, 2:30:00 AM
10/29/2022, 2:30:00 AM
10/30/2022, 2:30:00 AM
10/31/2022, 2:30:00 AM
11/1/2022, 2:30:00 AM
11/2/2022, 2:30:00 AM
11/3/2022, 2:30:00 AM
11/4/2022, 2:30:00 AM
11/5/2022, 2:30:00 AM
11/6/2022, 2:30:00 AM
11/7/2022, 2:30:00 AM
11/8/2022, 2:30:00 AM
11/9/2022, 2:30:00 AM
11/10/2022, 2:30:00 AM
11/11/2022, 2:30:00 AM
11/12/2022, 2:30:00 AM
11/13/2022, 2:30:00 AM
11/14/2022, 2:30:00 AM
11/15/2022, 2:30:00 AM
11/16/2022, 2:30:00 AM
11/17/2022, 2:30:00 AM
11/18/2022, 2:30:00 AM
11/19/2022, 2:30:00 AM
11/20/2022, 2:30:00 AM
11/21/2022, 2:30:00 AM
11/22/2022, 2:30:00 AM
11/23/2022, 2:30:00 AM
11/24/2022, 2:30:00 AM
11/25/2022, 2:30:00 AM
11/26/2022, 2:30:00 AM
11/27/2022, 2:30:00 AM
11/28/2022, 2:30:00 AM
11/29/2022, 2:30:00 AM
11/30/2022, 2:30:00 AM
12/1/2022, 2:30:00 AM
12/2/2022, 2:30:00 AM
12/3/2022, 2:30:00 AM
12/4/2022, 2:30:00 AM
12/5/2022, 2:30:00 AM
12/6/2022, 2:30:00 AM
12/7/2022, 2:30:00 AM
12/8/2022, 2:30:00 AM
12/9/2022, 2:30:00 AM
12/10/2022, 2:30:00 AM
12/11/2022, 2:30:00 AM
12/12/2022, 2:30:00 AM
12/13/2022, 2:30:00 AM
12/14/2022, 2:30:00 AM
12/15/2022, 2:30:00 AM
12/16/2022, 2:30:00 AM
12/17/2022, 2:30:00 AM
12/18/2022, 2:30:00 AM
12/19/2022, 2:30:00 AM
12/20/2022, 2:30:00 AM
12/21/2022, 2:30:00 AM
12/22/2022, 2:30:00 AM
12/23/2022, 2:30:00 AM
12/24/2022, 2:30:00 AM
12/25/2022, 2:30:00 AM
12/26/2022, 2:30:00 AM
12/27/2022, 2:30:00 AM
12/28/2022, 2:30:00 AM
12/29/2022, 2:30:00 AM
12/30/2022, 2:30:00 AM
12/31/2022, 2:30:00 AM
1/1/2023, 2:30:00 AM
1/2/2023, 2:30:00 AM
1/3/2023, 2:30:00 AM
1/4/2023, 2:30:00 AM
1/5/2023, 2:30:00 AM
1/6/2023, 2:30:00 AM
1/7/2023, 2:30:00 AM
1/8/2023, 2:30:00 AM
1/9/2023, 2:30:00 AM
1/10/2023, 2:30:00 AM
1/11/2023, 2:30:00 AM
1/12/2023, 2:30:00 AM
1/13/2023, 2:30:00 AM
1/14/2023, 2:30:00 AM
1/15/2023, 2:30:00 AM
1/16/2023, 2:30:00 AM
1/17/2023, 2:30:00 AM
1/18/2023, 2:30:00 AM
1/19/2023, 2:30:00 AM
1/20/2023, 2:30:00 AM
1/21/2023, 2:30:00 AM
1/22/2023, 2:30:00 AM
1/23/2023, 2:30:00 AM
1/24/2023, 2:30:00 AM
1/25/2023, 2:30:00 AM
1/26/2023, 2:30:00 AM
1/27/2023, 2:30:00 AM
1/28/2023, 2:30:00 AM
1/29/2023, 2:30:00 AM
1/30/2023, 2:30:00 AM
1/31/2023, 2:30:00 AM
2/1/2023, 2:30:00 AM
2/2/2023, 2:30:00 AM
2/3/2023, 2:30:00 AM
2/4/2023, 2:30:00 AM
2/5/2023, 2:30:00 AM
2/6/2023, 2:30:00 AM
2/7/2023, 2:30:00 AM
2/8/2023, 2:30:00 AM
2/9/2023, 2:30:00 AM
2/10/2023, 2:30:00 AM
2/11/2023, 2:30:00 AM
2/12/2023, 2:30:00 AM
2/13/2023, 2:30:00 AM
2/14/2023, 2:30:00 AM
2/15/2023, 2:30:00 AM
2/16/2023, 2:30:00 AM
2/17/2023, 2:30:00 AM
2/18/2023, 2:30:00 AM
2/19/2023, 2:30:00 AM
2/20/2023, 2:30:00 AM
2/21/2023, 2:30:00 AM
2/22/2023, 2:30:00 AM
2/23/2023, 2:30:00 AM
2/24/2023, 2:30:00 AM
2/25/2023, 2:30:00 AM
2/26/2023, 2:30:00 AM
2/27/2023, 2:30:00 AM
2/28/2023, 2:30:00 AM
3/1/2023, 2:30:00 AM
3/2/2023, 2:30:00 AM
3/3/2023, 2:30:00 AM
3/4/2023, 2:30:00 AM
3/5/2023, 2:30:00 AM
3/6/2023, 2:30:00 AM
3/7/2023, 2:30:00 AM
3/8/2023, 2:30:00 AM
3/9/2023, 2:30:00 AM
3/10/2023, 2:30:00 AM
3/11/2023, 2:30:00 AM
3/12/2023, 2:30:00 AM
3/13/2023, 2:30:00 AM
3/14/2023, 2:30:00 AM
3/15/2023, 2:30:00 AM
3/16/2023, 2:30:00 AM
3/17/2023, 2:30:00 AM
3/18/2023, 2:30:00 AM
3/19/2023, 2:30:00 AM
3/20/2023, 2:30:00 AM
3/21/2023, 2:30:00 AM
3/22/2023, 2:30:00 AM
3/23/2023, 2:30:00 AM
3/24/2023, 2:30:00 AM
3/25/2023, 2:30:00 AM
3/27/2023, 2:30:00 AM
3/28/2023, 2:30:00 AM
3/29/2023, 2:30:00 AM
3/30/2023, 2:30:00 AM
3/31/2023, 2:30:00 AM
4/1/2023, 2:30:00 AM
4/2/2023, 2:30:00 AM
4/3/2023, 2:30:00 AM
4/4/2023, 2:30:00 AM
4/5/2023, 2:30:00 AM
4/6/2023, 2:30:00 AM
4/7/2023, 2:30:00 AM
4/8/2023, 2:30:00 AM
4/9/2023, 2:30:00 AM
4/10/2023, 2:30:00 AM
4/11/2023, 2:30:00 AM
4/12/2023, 2:30:00 AM
4/13/2023, 2:30:00 AM
4/14/2023, 2:30:00 AM
4/15/2023, 2:30:00 AM
4/16/2023, 2:30:00 AM
4/17/2023, 2:30:00 AM
4/18/2023, 2:30:00 AM
4/19/2023, 2:30:00 AM
4/20/2023, 2:30:00 AM
4/21/2023, 2:30:00 AM
4/22/2023, 2:30:00 AM
4/23/2023, 2:30:00 AM
4/24/2023, 2:30:00 AM
4/25/2023, 2:30:00 AM
4/26/2023, 2:30:00 AM
4/27/2023, 2:30:00 AM
4/28/2023, 2:30:00 AM
4/29/2023, 2:30:00 AM
4/30/2023, 2:30:00 AM
5/1/2023, 2:30:00 AM
5/2/2023, 2:30:00 AM
5/3/2023, 2:30:00 AM
5/4/2023, 2:30:00 AM
5/5/2023, 2:30:00 AM
5/6/2023, 2:30:00 AM
5/7/2023, 2:30:00 AM
5/8/2023, 2:30:00 AM
5/9/2023, 2:30:00 AM
5/10/2023, 2:30:00 AM
5/11/2023, 2:30:00 AM
5/12/2023, 2:30:00 AM
5/13/2023, 2:30:00 AM
5/14/2023, 2:30:00 AM
5/15/2023, 2:30:00 AM
5/16/2023, 2:30:00 AM
5/17/2023, 2:30:00 AM
5/18/2023, 2:30:00 AM
5/19/2023, 2:30:00 AM
5/20/2023, 2:30:00 AM
5/21/2023, 2:30:00 AM
5/22/2023, 2:30:00 AM
5/23/2023, 2:30:00 AM
5/24/2023, 2:30:00 AM
5/25/2023, 2:30:00 AM
5/26/2023, 2:30:00 AM
5/27/2023, 2:30:00 AM
5/28/2023, 2:30:00 AM
5/29/2023, 2:30:00 AM
5/30/2023, 2:30:00 AM
5/31/2023, 2:30:00 AM
6/1/2023, 2:30:00 AM
6/2/2023, 2:30:00 AM
6/3/2023, 2:30:00 AM
6/4/2023, 2:30:00 AM
6/5/2023, 2:30:00 AM
6/6/2023, 2:30:00 AM
6/7/2023, 2:30:00 AM
6/8/2023, 2:30:00 AM
6/9/2023, 2:30:00 AM
6/10/2023, 2:30:00 AM
6/11/2023, 2:30:00 AM
6/12/2023, 2:30:00 AM
6/13/2023, 2:30:00 AM
6/14/2023, 2:30:00 AM
6/15/2023, 2:30:00 AM
6/16/2023, 2:30:00 AM
6/17/2023, 2:30:00 AM
6/18/2023, 2:30:00 AM
6/19/2023, 2:30:00 AM
6/20/2023, 2:30:00 AM
6/21/2023, 2:30:00 AM
6/22/2023, 2:30:00 AM
6/23/2023, 2:30:00 AM
6/24/2023, 2:30:00 AM
6/25/2023, 2:30:00 AM
6/26/2023, 2:30:00 AM
6/27/2023, 2:30:00 AM
6/28/2023, 2:30:00 AM
6/29/2023, 2:30:00 AM
6/30/2023, 2:30:00 AM
7/1/2023, 2:30:00 AM
7/2/2023, 2:30:00 AM
7/3/2023, 2:30:00 AM
7/4/2023, 2:30:00 AM
7/5/2023, 2:30:00 AM
7/6/2023, 2:30:00 AM
7/7/2023, 2:30:00 AM
7/8/2023, 2:30:00 AM
7/9/2023, 2:30:00 AM
7/10/2023, 2:30:00 AM
7/11/2023, 2:30:00 AM
7/12/2023, 2:30:00 AM
7/13/2023, 2:30:00 AM
7/14/2023, 2:30:00 AM
7/15/2023, 2:30:00 AM
7/16/2023, 2:30:00 AM
7/17/2023, 2:30:00 AM
7/18/2023, 2:30:00 AM
7/19/2023, 2:30:00 AM
7/20/2023, 2:30:00 AM
7/21/2023, 2:30:00 AM
7/22/2023, 2:30:00 AM
7/23/2023, 2:30:00 AM
7/24/2023, 2:30:00 AM
7/25/2023, 2:30:00 AM
7/26/2023, 2:30:00 AM
7/27/2023, 2:30:00 AM
7/28/2023, 2:30:00 AM
7/29/2023, 2:30:00 AM
7/30/2023, 2:30:00 AM
7/31/2023, 2:30:00 AM
8/1/2023, 2:30:00 AM
8/2/2023, 2:30:00 AM
8/3/2023, 2:30:00 AM
8/4/2023, 2:30:00 AM
8/5/2023, 2:30:00 AM
8/6/2023, 2:30:00 AM
8/7/2023, 2:30:00 AM
8/8/2023, 2:30:00 AM
8/9/2023, 2:30:00 AM
8/10/2023, 2:30:00 AM
8/11/2023, 2:30:00 AM
8/12/2023, 2:30:00 AM
8/13/2023, 2:30:00 AM
8/14/2023, 2:30:00 AM
8/15/2023, 2:30:00 AM
8/16/2023, 2:30:00 AM
8/17/2023, 2:30:00 AM
8/18/2023, 2:30:00 AM
8/19/2023, 2:30:00 AM
8/20/2023, 2:30:00 AM
8/21/2023, 2:30:00 AM
8/22/2023, 2:30:00 AM
8/23/2023, 2:30:00 AM
8/24/2023, 2:30:00 AM
8/25/2023, 2:30:00 AM
8/26/2023, 2:30:00 AM
8/27/2023, 2:30:00 AM
8/28/2023, 2:30:00 AM
8/29/2023, 2:30:00 AM
8/30/2023, 2:30:00 AM
8/31/2023, 2:30:00 AM
9/1/2023, 2:30:00 AM
9/2/2023, 2:30:00 AM
9/3/2023, 2:30:00 AM
9/4/2023, 2:30:00 AM
9/5/2023, 2:30:00 AM
9/6/2023, 2:30:00 AM
9/7/2023, 2:30:00 AM
9/8/2023, 2:30:00 AM
9/9/2023, 2:30:00 AM
9/10/2023, 2:30:00 AM
9/11/2023, 2:30:00 AM
9/12/2023, 2:30:00 AM
9/13/2023, 2:30:00 AM
9/14/2023, 2:30:00 AM
9/15/2023, 2:30:00 AM
9/16/2023, 2:30:00 AM
9/17/2023, 2:30:00 AM
9/18/2023, 2:30:00 AM
9/19/2023, 2:30:00 AM
9/20/2023, 2:30:00 AM
9/21/2023, 2:30:00 AM
9/22/2023, 2:30:00 AM
9/23/2023, 2:30:00 AM
9/24/2023, 2:30:00 AM
9/25/2023, 2:30:00 AM
9/26/2023, 2:30:00 AM
9/27/2023, 2:30:00 AM
9/28/2023, 2:30:00 AM
9/29/2023, 2:30:00 AM
9/30/2023, 2:30:00 AM
10/1/2023, 2:30:00 AM
10/2/2023, 2:30:00 AM
10/3/2023, 2:30:00 AM
10/4/2023, 2:30:00 AM
10/5/2023, 2:30:00 AM
10/6/2023, 2:30:00 AM
10/7/2023, 2:30:00 AM
10/8/2023, 2:30:00 AM
10/9/2023, 2:30:00 AM
10/10/2023, 2:30:00 AM
10/11/2023, 2:30:00 AM
10/12/2023, 2:30:00 AM
10/13/2023, 2:30:00 AM
10/14/2023, 2:30:00 AM
10/15/2023, 2:30:00 AM
10/16/2023, 2:30:00 AM
10/17/2023, 2:30:00 AM
10/18/2023, 2:30:00 AM
10/19/2023, 2:30:00 AM
10/20/2023, 2:30:00 AM
10/21/2023, 2:30:00 AM
10/22/2023, 2:30:00 AM
10/23/2023, 2:30:00 AM
10/24/2023, 2:30:00 AM
10/25/2023, 2:30:00 AM
10/26/2023, 2:30:00 AM
10/27/2023, 2:30:00 AM
✘   (161 / 162)

   FAIL  "0 30 2 * * * with 365 iterations should return 365 days from now in Europe/Berlin"
    Expected values to be deeply equal:  (equal)

        ++true     (Expected)
        --false    (Actual)

March 26th 2023 is missing from the output, March 26th 2023 2:30 AM does not exist as we move our clocks from 2AM to 3AM.

Seeing that you did some further refactoring with minitz since then I also ran the same test with the current release croner v5.3.1

~/p/croner (master)> npm run test

> croner@5.3.1 test
> uvu test test.croner.js

node/js/test.croner.js
• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • 10/27/2022, 2:30:00 AM
10/28/2022, 2:30:00 AM
10/29/2022, 2:30:00 AM
10/30/2022, 2:30:00 AM
10/31/2022, 2:30:00 AM
11/1/2022, 2:30:00 AM
11/2/2022, 2:30:00 AM
11/3/2022, 2:30:00 AM
11/4/2022, 2:30:00 AM
11/5/2022, 2:30:00 AM
11/6/2022, 2:30:00 AM
11/7/2022, 2:30:00 AM
11/8/2022, 2:30:00 AM
11/9/2022, 2:30:00 AM
11/10/2022, 2:30:00 AM
11/11/2022, 2:30:00 AM
11/12/2022, 2:30:00 AM
11/13/2022, 2:30:00 AM
11/14/2022, 2:30:00 AM
11/15/2022, 2:30:00 AM
11/16/2022, 2:30:00 AM
11/17/2022, 2:30:00 AM
11/18/2022, 2:30:00 AM
11/19/2022, 2:30:00 AM
11/20/2022, 2:30:00 AM
11/21/2022, 2:30:00 AM
11/22/2022, 2:30:00 AM
11/23/2022, 2:30:00 AM
11/24/2022, 2:30:00 AM
11/25/2022, 2:30:00 AM
11/26/2022, 2:30:00 AM
11/27/2022, 2:30:00 AM
11/28/2022, 2:30:00 AM
11/29/2022, 2:30:00 AM
11/30/2022, 2:30:00 AM
12/1/2022, 2:30:00 AM
12/2/2022, 2:30:00 AM
12/3/2022, 2:30:00 AM
12/4/2022, 2:30:00 AM
12/5/2022, 2:30:00 AM
12/6/2022, 2:30:00 AM
12/7/2022, 2:30:00 AM
12/8/2022, 2:30:00 AM
12/9/2022, 2:30:00 AM
12/10/2022, 2:30:00 AM
12/11/2022, 2:30:00 AM
12/12/2022, 2:30:00 AM
12/13/2022, 2:30:00 AM
12/14/2022, 2:30:00 AM
12/15/2022, 2:30:00 AM
12/16/2022, 2:30:00 AM
12/17/2022, 2:30:00 AM
12/18/2022, 2:30:00 AM
12/19/2022, 2:30:00 AM
12/20/2022, 2:30:00 AM
12/21/2022, 2:30:00 AM
12/22/2022, 2:30:00 AM
12/23/2022, 2:30:00 AM
12/24/2022, 2:30:00 AM
12/25/2022, 2:30:00 AM
12/26/2022, 2:30:00 AM
12/27/2022, 2:30:00 AM
12/28/2022, 2:30:00 AM
12/29/2022, 2:30:00 AM
12/30/2022, 2:30:00 AM
12/31/2022, 2:30:00 AM
1/1/2023, 2:30:00 AM
1/2/2023, 2:30:00 AM
1/3/2023, 2:30:00 AM
1/4/2023, 2:30:00 AM
1/5/2023, 2:30:00 AM
1/6/2023, 2:30:00 AM
1/7/2023, 2:30:00 AM
1/8/2023, 2:30:00 AM
1/9/2023, 2:30:00 AM
1/10/2023, 2:30:00 AM
1/11/2023, 2:30:00 AM
1/12/2023, 2:30:00 AM
1/13/2023, 2:30:00 AM
1/14/2023, 2:30:00 AM
1/15/2023, 2:30:00 AM
1/16/2023, 2:30:00 AM
1/17/2023, 2:30:00 AM
1/18/2023, 2:30:00 AM
1/19/2023, 2:30:00 AM
1/20/2023, 2:30:00 AM
1/21/2023, 2:30:00 AM
1/22/2023, 2:30:00 AM
1/23/2023, 2:30:00 AM
1/24/2023, 2:30:00 AM
1/25/2023, 2:30:00 AM
1/26/2023, 2:30:00 AM
1/27/2023, 2:30:00 AM
1/28/2023, 2:30:00 AM
1/29/2023, 2:30:00 AM
1/30/2023, 2:30:00 AM
1/31/2023, 2:30:00 AM
2/1/2023, 2:30:00 AM
2/2/2023, 2:30:00 AM
2/3/2023, 2:30:00 AM
2/4/2023, 2:30:00 AM
2/5/2023, 2:30:00 AM
2/6/2023, 2:30:00 AM
2/7/2023, 2:30:00 AM
2/8/2023, 2:30:00 AM
2/9/2023, 2:30:00 AM
2/10/2023, 2:30:00 AM
2/11/2023, 2:30:00 AM
2/12/2023, 2:30:00 AM
2/13/2023, 2:30:00 AM
2/14/2023, 2:30:00 AM
2/15/2023, 2:30:00 AM
2/16/2023, 2:30:00 AM
2/17/2023, 2:30:00 AM
2/18/2023, 2:30:00 AM
2/19/2023, 2:30:00 AM
2/20/2023, 2:30:00 AM
2/21/2023, 2:30:00 AM
2/22/2023, 2:30:00 AM
2/23/2023, 2:30:00 AM
2/24/2023, 2:30:00 AM
2/25/2023, 2:30:00 AM
2/26/2023, 2:30:00 AM
2/27/2023, 2:30:00 AM
2/28/2023, 2:30:00 AM
3/1/2023, 2:30:00 AM
3/2/2023, 2:30:00 AM
3/3/2023, 2:30:00 AM
3/4/2023, 2:30:00 AM
3/5/2023, 2:30:00 AM
3/6/2023, 2:30:00 AM
3/7/2023, 2:30:00 AM
3/8/2023, 2:30:00 AM
3/9/2023, 2:30:00 AM
3/10/2023, 2:30:00 AM
3/11/2023, 2:30:00 AM
3/12/2023, 2:30:00 AM
3/13/2023, 2:30:00 AM
3/14/2023, 2:30:00 AM
3/15/2023, 2:30:00 AM
3/16/2023, 2:30:00 AM
3/17/2023, 2:30:00 AM
3/18/2023, 2:30:00 AM
3/19/2023, 2:30:00 AM
3/20/2023, 2:30:00 AM
3/21/2023, 2:30:00 AM
3/22/2023, 2:30:00 AM
3/23/2023, 2:30:00 AM
3/24/2023, 2:30:00 AM
3/25/2023, 2:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
3/26/2023, 1:30:00 AM
✘   (166 / 167)

   FAIL  "0 30 2 * * * with 365 iterations should return 365 days from now in Europe/Berlin"
    Expected values to be deeply equal:  (equal)

        ++true     (Expected)
        --false    (Actual)

I haven't yet been able to check how the calculation did change from 4.4.0 to 5.3.1, but this seems very broken to me. It seems croner is unable to get a next valid date after the invalid date March 26th 2023 1:30AM. I'd rather keep skipping a day than hanging indefinitely on DST start.
That being said, timezones and DST are challenging and I can not provide a better solution or even a suggestion how to make this reliably testable on all developer machines across different timezones. I hope we can somehow get to a better solution than the current one, in the meantime I'm just going to stick with our current croner release.

@Hexagon
Copy link
Owner

Hexagon commented Oct 26, 2022

Oh, this is interesting! This shouldn't be a real world problem, as runs can never start in the past, as soon as the problematic hour has passed, runs will keep on triggering. However - it must definitely be fixed 👍

@egfx-notifications
Copy link
Contributor Author

This shouldn't be a real world problem, as runs can never start in the past, as soon as the problematic hour has passed, runs will keep on triggering.

That's good to know :)

@Hexagon
Copy link
Owner

Hexagon commented Oct 30, 2022

Resolved in 5.3.2

@Hexagon Hexagon closed this as completed Oct 31, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants