2016-11-08 2 views
1

Итак, у меня есть приложение, в котором есть два типа пользователей. Всякий раз, когда эти пользователи сопоставляются, вы получите электронное письмо, как только они совпадут, а затем я хотел бы отправить другое электронное письмо в будущем дату и время, которые я сохраню в своей базе данных (MySQL). Моя проблема связана со временем, установленным для автоматической электронной почты (с использованием sendgrid в качестве транспорта). Я пытаюсь сделать метод для расчета правильного времени для каждого пользователя в зависимости от своего часового пояса (который они вводят в базу данных для каждой формы), чтобы он отправлял в тот же момент на основе сохраненного времени. Наверное, я не понимаю этого правильно. Может кто-нибудь объяснить мне, как это сделать. Это то, что у меня есть до сих пор.Компенсация часовых поясов в автоматизированных почтовых сообщениях

Date.prototype.scheduleDate = function(day, time, tz) 
{ 
    var dat = new Date(this.valueOf()); 
    do{ 
     dat.setDate(dat.getDate() + 1); 
    } 
    while(dat.getDay() !== day); 
    if(time === 'Morn'){ 
     switch(tz){ 
      case 'eastern': 
       dat.setHours(10,30,0,0); 
       break 
      case 'central': 
       dat.setHours(9,30,0,0); 
       break 
      case 'mountain': 
       dat.setHours(8,30,0,0); 
       break 
      case 'pacific': 
       dat.setHours(7,30,0,0); 
       break 
     } 
    }else if(time === 'Noon'){ 
     switch(tz){ 
      case 'eastern': 
       dat.setHours(15,30,0,0); 
       break 
      case 'central': 
       dat.setHours(14,30,0,0); 
       break 
      case 'mountain': 
       dat.setHours(13,30,0,0); 
       break 
      case 'pacific': 
       dat.setHours(12,30,0,0); 
       break 
     } 
    }else if(time === 'Eve'){ 
     switch(tz){ 
      case 'eastern': 
       dat.setHours(19,30,0,0); 
       break 
      case 'central': 
       dat.setHours(18,30,0,0); 
       break 
      case 'mountain': 
       dat.setHours(17,30,0,0); 
       break 
      case 'pacific': 
       dat.setHours(16,30,0,0); 
       break 
     } 
    }else if(time === 'Night'){ 
     switch(tz){ 
      case 'eastern': 
       dat.setHours(22,0,0,0); 
       break 
      case 'central': 
       dat.setHours(21,0,0,0); 
       break 
      case 'mountain': 
       dat.setHours(20,0,0,0); 
       break 
      case 'pacific': 
       dat.setHours(19,0,0,0); 
       break 
     } 
    } 
    return dat; 
} 
+1

Отправить временную метку unix на сервер – adeneo

+0

Я изучал это. 'NOW()' выполнит это право? Я хотел, чтобы после подтверждения от обоих пользователей, в основном, было отправлено электронное письмо в соответствующее время в будущем, чтобы потребовать, чтобы я рассказал ему, когда он достигнет этой даты и времени, чтобы отправить другое электронное письмо. – KellysOnTop23

ответ

1

Если ваш сервер использует UTC, тогда изменения часов из-за перехода на летнее время не являются проблемой. Разница во времени на стороне клиента не должна беспокоить.

Если вы планируете отправить электронное письмо на сервер в 00:01 UTC, получатель в Нью-Йорке увидит, что он был отправлен в 19:01 (EST/UTC -5 часов), а получатель в Сан-Франциско см. он был отправлен в 16:01 (PST/UTC -8 часов). Это то же самое время.

Установка Linux сервера Time Zone

Установка времени сервера зоны зависит от операционной системы сервера, я предполагаю, что сервер работает под управлением Linux. Откройте консоль на сервере, команда date сообщит вам местную информацию о часовом поясе и часовом поясе.

$ date 
Wed Nov 9 06:36:54 UTC 2016 

Если система не использует UTC, ее легко изменить.

Ubuntu: sudo dpkg-reconfigure tzdata

RedHat: sudo redhat-config-date

В меню выберите "None of the above" или "Etc", а затем "UTC".

Альтернативно вы можете вручную изменить часовой пояс, скопировав/связав соответствующий файл информации о часовом поясе.

$ ls /usr/share/zoneinfo 
Africa  Cuba  GMT0   Japan    Pacific  Turkey 
America  EET  GMT-0  Kwajalein   Poland  UCT 
Antarctica Egypt GMT+0  leap-seconds.list Portugal Universal 
Arctic  Eire  Greenwich Libya    posix  US 
Asia  EST  Hongkong  localtime   posixrules UTC 
Atlantic EST5EDT HST   MET    PRC   WET 
Australia Etc  Iceland  Mexico    PST8PDT  W-SU 
Brazil  Europe Indian  MST    right  zone.tab 
Canada  Factory Iran   MST7MDT   ROC   Zulu 
CET   GB  iso3166.tab Navajo    ROK 
Chile  GB-Eire Israel  NZ     Singapore 
CST6CDT  GMT  Jamaica  NZ-CHAT   SystemV 

Вы хотите изменить /etc/localtime использовать информацию в формате UTC.

$ sudo unlink /etc/localtime 
$ sudo ln -s /usr/share/zoneinfo/UTC /etc/localtime 

Установка MySQL часового пояса

Определить часовой пояс системы, это часовой пояс, который был установлен при запуске сервера:

SELECT @@system_time_zone; 

Получить временную метку для текущей сессии :

SELECT CURRENT_TIMESTAMP; 

Получить временную метку UTC:

SELECT UTC_TIMESTAMP(); 

Получить разницу во времени между текущей сессии и UTC:

SELECT TIMEDIFF(CURRENT_TIMESTAMP, UTC_TIMESTAMP); 

Вы можете установить часовой пояс для текущей сессии, используя смещение от UTC.

SET TIME_ZONE = '+00:00'; 

Если вы хотите, чтобы сделать изменения постоянными вы должны найти и отредактировать файл конфигурации MySQL my.cnf и установить часовой пояс по умолчанию. Его местоположение будет зависеть от того, как MySQL был установлен в вашей системе.

default_time_zone='+00:00' 

Перезапустите сервер после внесения изменений и используйте приведенные выше команды, чтобы проверить изменение.

+0

Ну, это облегчение .... так как я могу убедиться, что мой сервер использует UTC, когда имеет дело со временем? У меня есть узел с mysql – KellysOnTop23

+0

У меня есть mac и я работаю над node.js. Я не могу понять, каким образом можно получить базу данных mysql, чтобы использовать utc, когда записывать/обновлять запись. – KellysOnTop23

+0

. Все в порядке, я думал, что вы находитесь в производственной среде. Хорошей новостью является то, что внутри MySQL хранит даты как UTC, когда вы выбираете значение даты, которое оно преобразует в часовой пояс текущего сеанса. Я отредактирую свой ответ, чтобы включить некоторые соответствующие команды MySQL. –

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