Я разрабатываю веб-интерфейс для пользователей из Великобритании. В настоящее время мы сохраняем время в GMT в нашей базе данных. Но во внешнем интерфейсе пользователь вводит дату в Великобритании, которую необходимо преобразовать в GMT. Но проблема заключается в обращении.
Итак, я хочу разработать функцию в Javascript, которая определяет в заданную дату (часовой пояс Великобритании), было ли летнее время или нет.
В настоящее время я работаю с библиотекой moment.js, но не знаю, как ее рассчитать. Любая помощь приветствуется.
Я посмотрел. Но проблема в том, что я работаю за пределами Великобритании. Если нет способа установить часовой пояс по умолчанию для Великобритании (я думаю, что в настоящее время moment.js принимает время ОС в качестве часового пояса по умолчанию.) IsDST не возвращает его для Великобритании.
@Emissary, я смотрел эту ветку. Может, я действительно не понимаю DST. Но опять же, поправьте меня, если я ошибаюсь. Эти функции будут работать только для текущего часового пояса браузеров, а не для Великобритании. Вся моя проблема в том, что мне нужен такой же тип функции, которая не возвращает летнее время для часового пояса браузеров, а для Великобритании.
@ umair.ashfr, Вы нашли для этого какое-нибудь решение?
@BVS, решение, с которым я работал, заключалось в определении DST на стороне сервера, а не на стороне клиента.
@ umair.ashfr, о, ладно, вы не заметили каких-либо трудностей в реализации той же логики на стороне клиента? Не могли бы вы поделиться логикой, реализованной на стороне сервера, для справки?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


У меня есть собственный модуль npm, который делает это, но я не могу рекомендовать его, так как я никогда не удосужился подробно его документировать, поэтому пока он никому, кроме меня, не полезен.
Однако вот один из подходов, который вы можете использовать с помощью moment.js:
1) Получите время, когда наступает полночь в начале рассматриваемого дня.
2) Узнайте время наступления полуночи следующего дня.
3) Вычтите первый раз из второго. Если это меньше 24 часов, тогда часы были переведены вперед и началось летнее время. Если это меньше 24 часов, это время, когда часы были повернуты вспять и летнее время закончилось. Все остальное - обычный день.
Обновлять:
Другой ответ дает хороший способ определить, наблюдается ли летнее время в определенный момент времени (не совсем идеально в некоторых нечетных случаях). Я думал, вы задаетесь другим вопросом - менялись ли часы в определенный день. Если это важно для вас, это можно сделать следующим образом:
function checkDate(year, month, day) { // Month from 1-12, not the weird 0-11 month
const startOfDay = +new Date(year, month - 1, day, 0, 0, 0, 0);
const endOfDay = +new Date(year, month - 1, day + 1, 0, 0, 0, 0);
const hours = (endOfDay - startOfDay) / 1000 / 3600;
if (hours < 24)
console.info('DST started');
else if (hours > 24)
console.info('DST ended');
else
console.info('No DST change');
}
не могли бы вы уточнить это на небольшом примере? это было бы действительно полезно
для этого не нужно использовать momentjs. вы можете использовать код ниже
Date.prototype.stdTimezoneOffset = function () {
var jan = new Date(this.getFullYear(), 0, 1);
var jul = new Date(this.getFullYear(), 6, 1);
return Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset());
}
Date.prototype.isDstObserved = function () {
return this.getTimezoneOffset() < this.stdTimezoneOffset();
}
var today = new Date();
if (today.isDstObserved()) {
alert ("Daylight saving time!");
}
см. Как проверить, есть ли летнее время (летнее время) в javascript для более подробной информации.
счастливое кодирование
спасибо за ответ, посмотрел. Но у меня есть вопрос (может быть, я все еще не понимаю, что такое концепция DST). Действительны ли указанные выше функции для часового пояса Великобритании. Под этим я подразумеваю, что если мой браузер находится за пределами Великобритании (скажем, в Индии), как мне установить часовой пояс в Великобритании. Это действительно сбивает меня с толку.
JavaScript изначально имеет дело только с UTC (не совсем по британскому времени, поскольку в UTC нет DST) или с одним локальным часовым поясом браузера. Вам определенно понадобится что-то вроде moment.js, если вы хотите отображать время по Великобритании для кого-то в Нью-Йорке или Токио.
вы смотрели isDST из momentjs. Я думал, что это просто и легко использовать.