2016-11-08 2 views
1

私は2種類のユーザーを持つアプリケーションを持っています。これらのユーザーが一致するたびに、メールが一致するとすぐにメールが届き、データベース(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 Hours)に送信され、サンフランシスコの受信者はそれが16:01(PST/UTC-8時間)に送信されたことを確認してください。それは全く同じ時間です。サーバーのタイムゾーンを設定する

のLinuxサーバのタイムゾーンを設定する

は、私は、サーバーがLinuxを実行していると仮定している、サーバーのOSに依存します。サーバー上でコンソールを開くと、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 

UTC情報を使用するように/etc/localtimeを変更したいとします。

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

MySQLのタイムゾーンの設定

これは、サーバが起動時に設定された時間帯で、システムのタイムゾーンを特定します

SELECT @@system_time_zone; 

は、現在のセッションのタイムスタンプを取得します。 :

SELECT CURRENT_TIMESTAMP; 

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データベースにutcの時刻を使用させる方法がないようです。 – KellysOnTop23

+0

これは大丈夫です。私はあなたが本番環境にいると思っていました。良いニュースは、内部的にMySQLが日付をUTCとして格納することです。日付値を選択すると、現在のセッションのタイムゾーンに変換されます。関連するいくつかのMySQLコマンドを含むように答えを編集します。 –

関連する問題