Из заголовка вашего вопроса «как избежать DST» - нельзя. Местное время во многих часовых поясах имеет летнее время. Вы не можете избежать этого - вместо этого вы должны использовать API, которые его учитывают.
Поскольку вы присвоили dayMS
равным 24 часам, вы работаете против этого. Дни с типичными переходами DST на 1 час могут длиться 23 или 25 часов. Также возможно иметь переходы продолжительностью 30 минут, которые могут быть вызваны переходом на летнее время (хотя бы в одном часовом поясе) или просто из-за изменения стандартного смещения часового пояса.
Таким образом, при вычислении дней не предполагайте, что они являются фиксированной единицей времени. Они отличаются так же, как каждый месяц имеет разное количество дней, и как високосные годы имеют на один день больше, чем обычные годы. Подумайте: «дата математика! = Время математика».
В приведенном выше коде нет необходимости звонить getTime()
никогда. Просто сохраните значения как Date
объекты и используйте механизм, указанный в комментариях к вопросу. Другими словами, после удаления всех .getTime()
вхождений, продвиньте дату с помощью:
check_date.setDate(check_date.getDate() + 1 ));
Это изменяет переменную check_date
, поэтому нет назначения.
Это в основном нормально, но есть одна проблема с этим подходом, заключающаяся в том, что если результирующее значение попадает прямо в середину «разрыва» (такого как значение, созданное переходом DST с упругим движением вперед), оно будет скорректирована до некоторой другой законной стоимости. В зависимости от реализации приложения-скрипта Google, он может скорректироваться вперед или скорректироваться в обратном направлении (я не уверен, какой из них не в руки). Это может быть хорошо для одного случая, но я сомневаюсь, что вы захотите использовать это скорректированное значение в будущем. Таким образом, может быть безопаснее отслеживать целое число дней от базовой даты в отдельной переменной (скажем, x
) - тогда вместо увеличения check_date
один день за раз вы будете воссоздавать check_date
каждый пройти цикл и добавить x
дней.