Разница во времени красноярск новосибирск, Работа с часовыми поясами в JavaScript / Хабр

Разница во времени красноярск новосибирск

Перевод времени в Новосибирске: новый часовой пояс с 24 июля г. Начиная писать статью, я ещё не знал, что сказать в заключении, а теперь знаю. Меняются ли часовые пояса? N




В июле года президент России Владимир Путин подписал закон о возврате к зимнему времени он вступил в силу с 26 октября. Кстати, не все регионы согласились перейти на зимнее время — к примеру, этого не сделали Камчатка и Чукотка.

Разница во времени красноярск новосибирск

Весной года на одной из интернет-платформ начался сбор подписей под петицией за смену часового пояса для Томской области на час вперед от действующего. Павел Стефанский Более 11 тыс голосов собрал опрос о переводе часов в Томской области Активисты ссылались на то, что с переходом на постоянное зимнее время стало рано темнеть, а светать — ночью, а также утверждали, что из-за сдвинувшегося времени томичи теряют около светлых часов в год, наступающая рано темнота ведет к повышению аварийности на дорогах, росту преступности и большому расходу электроэнергии.

В августе года Алтайское краевое Законодательное собрание предложило спикерам парламентов соседних территорий, в том числе Томской области, обсудить смену часового пояса регионов; по мнению депутатов, переходить на новое время лучше вместе из-за тесного взаимодействия субъектов.

Томская облдума создала рабочую группу, большинство ее членов выступило за смену пояса. Перед принятием окончательного решения в регионе провели соцопрос. Большинство принявших в нем участие высказались за перевод часов. Против выступили жители Стрежевого и Александровского района. А через день — 25 февраля — областная дума приняла решение внести в Госдуму инициативу о смене часового пояса во всем регионе.

Госдума законопроекты о смене часового пояса для Томской области рассмотрит в первом чтении во вторник. Ранее сообщалось, что окончательное решение по томскому проекту о переводе часов Госдума может принять уже 19 апреля. Затем в течение недели вопрос должен быть рассмотрен на Совете Федерации, если инициатива будет одобрена, то в течение недели указ будет подписан президентом РФ.

N СССР, предлагаемый перевод стрелки вперед и установление на территории СССР следующего порядка исчисления времени: поясное время плюс 1 час постоянно в течение года с дополнительным переводом ежегодно часовой стрелки в последнее воскресенье марта в 2 часа на 1 час вперед.

Разница во времени красноярск новосибирск

СССР, введение летнего времени поясное время плюс 1 час и плюс летнее время и изменение границ часовых поясов. СССР, отмена декретного времени поясное время плюс 1 час , введение летнего времени; т. РФ, восстановление декретного времени поясное время плюс 1 час с дополнительным переводом ежегодно часовой стрелки летом летнее время. Но поскольку часовые пояса серверов и баз данных обычно синхронизируют, а форматирование возлагают на клиенты, в браузерной среде вам нужно определиться с несколькими факторами.

Дальше я буду объяснять применительно к браузерной среде. Объект Date в JavaScript Задачи, подразумевающие работу с данным или временем, решаются с помощью объекта Date. Большое влияние на объект оказал класс java. Date из Java, поэтому он унаследовал некоторые нежелательные свойства, вроде характеристик изменяемых данных и начинающегося с нуля месяца month.

Под капотом объект Date в JavaScript работает с временем, используя абсолютные значения в формате Unix-времени. Но на конструкторы и методы вроде функций parse , getHour , setHour и прочих влияет часовой пояс клиента точнее, пояс, указанный в ОС, в которой работает браузер.

Так что если вы создаёте объект Date напрямую, используя введёные пользователем данные, то в этих данных будет отражён местный часовой пояс клиента.

Часовые пояса России наглядно

Как я упоминал, JavaScript не предоставляет какого-либо способа произвольно изменить часовой пояс. Поэтому будем считать, что мы можем напрямую использовать значение часового пояса, указанное в браузере. Создание объекта Date с помощью введённых пользователем данных Вернёмся к первому примеру. Допустим, пользователь ввёл на своём устройстве сеульское время Вы можете использовать в конструкторе и строковые данные. Если применить их к Date , объект внутренне вызовет Date.

Но в MDN-документации к Date. Поэтому лучше этим методом не пользоваться. К примеру, в Safari и Internet Explorer строковое значение вроде —10—12 возвращает NaN , а в Chrome и Firefox возвращает локальный часовой пояс.

В некоторых ситуациях возвращается значение на основе UTC. Создание объекта Date с помощью серверных данных Допустим, что вы хотите получить данные с сервера. Если они в виде числового Unix-времени, то для создания объекта Date можете просто использовать конструктор.

Я ещё не упоминал, что когда конструктор Date получает одно значение в качестве единственного параметра, то вычисляет значение Unix-времени в миллисекундах внимание: JS обрабатывает Unix-время в миллисекундах.

Это означает, что второе значение нужно умножать на Как я объяснил выше, тогда метод Date.

Разница во времени красноярск новосибирск

Если же вы используете не самый свежий браузер, то удостоверьтесь в наличии буквы Z в конце значений. Без неё ваш старый браузер может интерпретировать значение на основе местного времени, а не UTC.

Но они отличаются.

😵В россии горит ,,Уралмашзавод\

В более позднем браузере значения будут одинаковыми. Чтобы эта проблема не возникала, всегда добавляйте Z в конце строки, если отсутствует информация о часовом поясе. Создание Date для передачи серверу Теперь можно пользоваться ранее созданным Date , свободно извлекать или добавлять время на основе местных часовых поясов. Только в конце обработки не забывайте преобразовывать данные в предыдущий формат, прежде чем возвращать серверу.

Если это Unix-время, можете воспользоваться методом getTime не забывайте о миллисекундах. Как я говорил, Internet Explorer 9. Получится значение, удовлетворяющее требованиям RFC Объект Date включает в себя toString , toLocaleString и их методы расширения. Но пользы от них мало, поскольку они используются, в основном, для возвращения строк на основе местного часового пояса, причём возвращаемые значения зависят от браузера и ОС. Изменение местного часового пояса Как видите, в JS есть какая-то поддержка часовых поясов.

А если нужно в приложении изменить местный пояс без учёта указанного в ОС значения? Или если нужно в одном приложении отобразить одновременно несколько часовых поясов? Как я уже несколько раз говорил, JS не позволяет вручную менять местный часовой пояс. Единственным решением будет добавление или удаление смещения из даты, для которой вы уже знаете значение смещения нужного пояса. Но не огорчайтесь. Быть может, есть другой путь. Вернёмся к нашему примеру с Сеулом.

Пусть этот часовой пояс указан в браузере. Пользователь вводит сеульское время Сервер передаёт дату в Unix-времени в миллисекундах и уведомляет, что нью-йоркское смещение равно Теперь можете преобразовать данные, если вам известно смещение местного часового пояса. В этом сценарии можно использовать метод getTimeZoneOffset. Не знаю, почему, но отображается именно так.

Преобразуем разницу в миллисекунды и создадим новый объект Date. Теперь воспользуемся его методом getXX для преобразование значения в нужный вам формат. Похоже, мы нашли простое решение. А можно ли преобразовать в местный часовой пояс, если мы знаем смещение нужного региона?

К сожалению, нет. Я уже говорил, что данные о часовых поясах — это база данных, хранящая все исторические изменения смещений.

Разница во времени красноярск новосибирск

Так что для получения корректного значения часового пояса вы должны знать смещение на нужную дату не текущую. Проблема преобразования местного часового пояса Если ещё немного поработаете с вышеприведённым примером, то скоро столкнётесь с проблемой.

Часовые пояса

Допустим, пользователь хочет проверить местное время в Нью-Йорке, а затем изменить дату с 11 на 15 число. Если воспользоваться методом setDate из объекта Date , то можно изменить дату, не затрагивая остальные значения. Что будет, если нужно передать данные обратно серверу? Поэтому придётся сделать обратное преобразование, прежде чем отправлять данные на сервер.

Ведь можно же обработать данные без преобразования и временно создать преобразованный объект Date только при форматировании? Так что для получения точного результата нужно вычислять данные на основе местного смещения.

На этом проблемы не заканчиваются. Вы не получите желаемое значение, просто добавив или вычтя смещение.