2015-10-08 5 views
0

У меня есть база данных 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?

+1

Общее правило: выполнять сопоставление даты/времени, нормализуя значения до UTC. Для этого вам нужно всегда сохранять смещение UTC с использованием значения datetime, к сожалению, у MySQL нет типа данных «Local + Offset», сопоставимого с типом '' datetimeoffset' типа MSSQL Server, поэтому вам понадобится отдельный столбец 'int' для сохранить смещение (в минутах или секундах). Что касается экономии дневного света, используйте библиотеку, которая поддерживает свою собственную базу данных (с историческими датами сбережения летнего времени тоже), я считаю, что библиотека Moment делает это. – Dai

+0

@ Дай важно сказать, что у меня нет абсолютно никакого контроля над базой данных MySQL - это база данных Wordpress, размещенная и контролируемая клиентом –

+0

Как информация о дате и часовом поясе хранится в базе данных? – Dai

ответ

1

Я столкнулся с одной и той же проблемой преобразования часового пояса.

Мне понравилось это, и он отлично работает.

var moment = require('moment'); 
var timezone = require('moment-timezone'); 

var now = timezone(moment()).tz("America/New_York"); 

Здесь now переменная дает время America/New_York.

После перехода на летнее время момент-часовой пояс позаботится об этом.

В момент-время у них есть раздел Parsing Ambiguities, в котором объясняется этот сценарий.

0

Это может быть полезно вам.

date_default_timezone_set("America/Los_Angeles"); 

Используя эту функцию php, вы можете установить часовой пояс по умолчанию.

Смежные вопросы