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
startOf('hour') and endOf('hour') not DST aware #2749
Comments
As discovered in #1990, this is also a problem in var date = new Date('2015-10-25T02:00:00+01:00');
date.toString(); // Sun Oct 25 2015 02:00:00 GMT+0100 (CET)
date.setMinutes(0);
date.toString(); // Sun Oct 25 2015 02:00:00 GMT+0200 (CEST) The above happens in Chrome. In Firefox, it happens for the hour before DST ends: var date = new Date('2015-10-25T02:00:00+02:00');
date.toString(); // Sun Oct 25 2015 02:00:00 GMT+0200 (CEST)
date.setMinutes(0);
date.toString(); // Sun Oct 25 2015 02:00:00 GMT+0100 (CEST) Both these cases can be avoided by using var date = new Date('2015-10-25T02:00:00+01:00');
date.toString(); // Sun Oct 25 2015 02:00:00 GMT+0100 (CET)
date.setTime(0); // for startOf('hour')
date.setTime(date.getTime() + (59 * 60000) + (59 * 1000) + 999); // for endOf('hour')
date.toString(); // Sun Oct 25 2015 02:59:59 GMT+0100 (CET) Could you adopt this implementation for moment? |
Good analysis. I think that would be a reasonable fix, yeah. |
On DST end transition, setting the date to the `startOf` `hour`, `minute` or `second` after having added 1 `hour`, `minute` or `second` to the date, would result in the date set to the initial value causing an infinite loop. Example: ```js 'use strict'; const moment = require('moment-timezone'); var m = moment(new Date('Sun Oct 30 2016 02:00:00 GMT+0200')); console.log(m.toString(), '<-- Just 1 hour before the DST end @ Europe/Madrid'); m.add(1, 'hours'); console.log(m.toString(), '<-- DST end transition @ Europe/Madrid works correctly'); m.startOf('hour'); console.log(m.toString(), '<-- Smthing wrong?? It goes back to the previous hour'); ``` Fixes: harrisiirak#72 Ref: moment/moment#2749
On DST end transition, setting the date to the `startOf` `hour`, `minute` or `second` after having added 1 `hour`, `minute` or `second` to the date, would result in the date set to the initial value causing an infinite loop. Example: ```js 'use strict'; const moment = require('moment-timezone'); var m = moment(new Date('Sun Oct 30 2016 02:00:00 GMT+0200')); console.log(m.toString(), '<-- Just 1 hour before the DST end @ Europe/Madrid'); m.add(1, 'hours'); console.log(m.toString(), '<-- DST end transition @ Europe/Madrid works correctly'); m.startOf('hour'); console.log(m.toString(), '<-- Smthing wrong?? It goes back to the previous hour'); ``` Fixes: harrisiirak#72 Ref: moment/moment#2749
On DST end transition, setting the date to the `startOf` `hour`, `minute` or `second` after having added 1 `hour`, `minute` or `second` to the date, would result in the date set to the initial value causing an infinite loop. Example: ```js 'use strict'; const moment = require('moment-timezone'); var m = moment(new Date('Sun Oct 30 2016 02:00:00 GMT+0200')); console.log(m.toString(), '<-- Just 1 hour before the DST end @ Europe/Madrid'); m.add(1, 'hours'); console.log(m.toString(), '<-- DST end transition @ Europe/Madrid works correctly'); m.startOf('hour'); console.log(m.toString(), '<-- Smthing wrong?? It goes back to the previous hour'); ``` Fixes: harrisiirak#72 Ref: moment/moment#2749
@joelmukuthu , maybe it's fixed, |
For the hour when DST ended in the
ECT (Europe/Copenhagen)
timezone,startOf('hour')
mutates the moment to the start of the previous hour instead of the current hour:Might be related to #1990. Tested on version 2.10.6
The text was updated successfully, but these errors were encountered: