所以我有一个有两种类型用户的应用程序。只要这些用户匹配,他们会在匹配后立即收到电子邮件,然后我希望在将来保存在我的数据库(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;
}
答案 0 :(得分:1)
如果您的服务器使用UTC,那么由于夏令时而导致的时钟更改不是问题。客户方的时差应无关紧要。
如果您安排服务器在00:01 UTC发送电子邮件,纽约的收件人将会在19:01(EST / 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
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'
进行更改后重新启动服务器,并使用上述命令验证更改。