У меня есть база данных MySQL, которая работает в America/New_York
и сервер узлов, работающий в UTC. Мне нужно запустить запрос к базе данных MySQL из узла и сравнить время. Сравнение времени довольно близко, поэтому мне нужно сделать изменение часового пояса.Сравнение дат из одного часового пояса с датами из другого часового пояса
Примечание: Это база данных Wordpress, контролируемая третьей стороной; Я не могу ALTER
базы данных в любом случае.
В настоящее время я просто делаю это:
comparisonDate = new Date((new Date).setHours(new Date().getHours() - 4)));
В частности вычитая 4 часов с момента UTC сервера узла для сравнения с MySQL.
Это прекрасно работает, но я обеспокоен тем, что произойдет после летнего времени. Я предпочел бы сделать преобразование (я могу гарантировать, что я заранее знаю часовой пояс сервера MySQL).
moment-timezone
кажется многообещающим, но когда я
moment.tz('America/New_York').toDate()
я получаю до сих пор получить дату со временем UTC и не EST/EDT времени.
Как я могу сделать соответствующее изменение часового пояса в JavaScript?
Общее правило: выполнять сопоставление даты/времени, нормализуя значения до UTC. Для этого вам нужно всегда сохранять смещение UTC с использованием значения datetime, к сожалению, у MySQL нет типа данных «Local + Offset», сопоставимого с типом '' datetimeoffset' типа MSSQL Server, поэтому вам понадобится отдельный столбец 'int' для сохранить смещение (в минутах или секундах). Что касается экономии дневного света, используйте библиотеку, которая поддерживает свою собственную базу данных (с историческими датами сбережения летнего времени тоже), я считаю, что библиотека Moment делает это. – Dai
@ Дай важно сказать, что у меня нет абсолютно никакого контроля над базой данных MySQL - это база данных Wordpress, размещенная и контролируемая клиентом –
Как информация о дате и часовом поясе хранится в базе данных? – Dai