longbill/jquery-date-range-picker

Wrong time calculation when start or end of range is in DST change day

Opened this issue · 0 comments

Algorithm used in changeTime() and setRange() works incorrectly when start or end date falls on DST change day.

Currently both functions set date/time to beginning of the day then add to it selected hours and minutes, this way:

opt[name] = parseInt(
    moment(parseInt(date))
    .startOf('day')
    .add(moment(opt[name + 'Time']).format('HH'), 'h')
    .add(moment(opt[name + 'Time']).format('mm'), 'm')
    .valueOf()
);

For example, for year 2020 when selected time range is 00:00 – 23:59:

  • on spring DST change day (29.03) 1 hour is added to the calculation and picker selects additionally whole 30.03
  • on autumn DST (25.10) 1 hour is subtracted and selection changes to 00:00 – 22:59

Problem can be solved by setting hours and minutes directly instead of adding them to the beginning of the day.

opt[name] = parseInt(
    moment(parseInt(date))
    .startOf('day')
    .hour(moment(opt[name + 'Time']).format('H'))
    .minute(moment(opt[name + 'Time']).format('m'))
    .valueOf()
);