2016-11-08 117 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命令。 –