2016-11-08 119 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(美國東部時間/ UTC -5小時)發送,而舊金山的收件人將看到它是在16:01(PST/UTC -8小時)發送的。這是完全相同的時間。

設置的Linux服務器時區

設置服務器時區取決於服務器操作系統上,我假設服務器運行Linux。在服務器上打開控制檯,date命令將爲您提供本地時間和時區信息。

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

如果系統未使用UTC,則很容易更改。

Ubuntu的:sudo dpkg-reconfigure tzdata

紅帽: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; 

Get the U TC時間戳:

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數據庫時,保存/更新記錄 – KellysOnTop23

+0

這沒關係,我還以爲你是在生產環境中使用UTC時間。好消息是內部MySQL將日期存儲爲UTC,當您選擇將日期值轉換爲當前會話的時區時。我將編輯我的答案以包含一些相關的MySQL命令。 –