Как узнать, было ли летнее время в определенную дату в javascript

Я разрабатываю веб-интерфейс для пользователей из Великобритании. В настоящее время мы сохраняем время в GMT в нашей базе данных. Но во внешнем интерфейсе пользователь вводит дату в Великобритании, которую необходимо преобразовать в GMT. Но проблема заключается в обращении.

Итак, я хочу разработать функцию в Javascript, которая определяет в заданную дату (часовой пояс Великобритании), было ли летнее время или нет.

В настоящее время я работаю с библиотекой moment.js, но не знаю, как ее рассчитать. Любая помощь приветствуется.

вы смотрели isDST из momentjs. Я думал, что это просто и легко использовать.

D. Seah 15.07.2018 08:16

Я посмотрел. Но проблема в том, что я работаю за пределами Великобритании. Если нет способа установить часовой пояс по умолчанию для Великобритании (я думаю, что в настоящее время moment.js принимает время ОС в качестве часового пояса по умолчанию.) IsDST не возвращает его для Великобритании.

umair.ashfr 15.07.2018 08:51

@Emissary, я смотрел эту ветку. Может, я действительно не понимаю DST. Но опять же, поправьте меня, если я ошибаюсь. Эти функции будут работать только для текущего часового пояса браузеров, а не для Великобритании. Вся моя проблема в том, что мне нужен такой же тип функции, которая не возвращает летнее время для часового пояса браузеров, а для Великобритании.

umair.ashfr 15.07.2018 09:35

@ umair.ashfr, Вы нашли для этого какое-нибудь решение?

BVS 28.10.2019 15:58

@BVS, решение, с которым я работал, заключалось в определении DST на стороне сервера, а не на стороне клиента.

umair.ashfr 28.10.2019 16:17

@ umair.ashfr, о, ладно, вы не заметили каких-либо трудностей в реализации той же логики на стороне клиента? Не могли бы вы поделиться логикой, реализованной на стороне сервера, для справки?

BVS 28.10.2019 16:27
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
6
2 960
2

Ответы 2

У меня есть собственный модуль 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');
}

не могли бы вы уточнить это на небольшом примере? это было бы действительно полезно

umair.ashfr 15.07.2018 08:59

для этого не нужно использовать 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). Действительны ли указанные выше функции для часового пояса Великобритании. Под этим я подразумеваю, что если мой браузер находится за пределами Великобритании (скажем, в Индии), как мне установить часовой пояс в Великобритании. Это действительно сбивает меня с толку.

umair.ashfr 15.07.2018 09:17

JavaScript изначально имеет дело только с UTC (не совсем по британскому времени, поскольку в UTC нет DST) или с одним локальным часовым поясом браузера. Вам определенно понадобится что-то вроде moment.js, если вы хотите отображать время по Великобритании для кого-то в Нью-Йорке или Токио.

kshetline 15.07.2018 10:05

Другие вопросы по теме