War*_*ine 8 javascript timezone node.js momentjs
我正在尝试根据用户偏好超时电子邮件.我早上的计算工作正常但是晚上的电子邮件永远不会被发送,因为日期不符合预期.
首先,这是我用来抓取时间并根据用户位置等进行调整的代码.
var time = moment();
var machineTZ = time.zone();
var userTZ = 420;
var diffTZ = userTZ - machineTZ;
var oneHour = moment(time).add('minutes', 60);
var morningRun = moment().startOf('day');
morningRun.hour(7).minute(0);
morningRun.add('minutes', diffTZ);
var eveningRun = moment().startOf('day');
eveningRun.hour(19).minute(30);
eveningRun.add('minutes', diffTZ);
Run Code Online (Sandbox Code Playgroud)
我正在检查每个小时,看看是否该安排另一封电子邮件出去.现在这是硬编码的,但是当我开始添加用户偏好时,他们将能够选择他们喜欢的东西当地时间.
我一直在调试我的值以进行故障排除.这是清晨运行的作业的输出(从服务器的角度来看):
lastRun: 2013-10-12T00:06:55.088Z (this one is being run at 1 am)
morningRun: 2013-10-11T14:00:00.000Z
eveningRun: 2013-10-12T02:30:00.000Z
Run Code Online (Sandbox Code Playgroud)
运行数字正如我所期望的那样.在两个小时的时间里,我想要晚上的电子邮件出去(我的时间晚上7:30 =第二天服务器时间凌晨2:30).
一小时后再看,我们看到:
lastRun: 2013-10-12T01:06:58.267Z (this one is at 2 am)
morningRun: 2013-10-12T14:00:00.000Z
eveningRun: 2013-10-13T02:30:00.000Z <---- what?
Run Code Online (Sandbox Code Playgroud)
突然之间,我对晚上的计算已经超过日期线,即使它仍然是10/12(还不是10/13).因此,我检查是否应安排电子邮件失败,因为它现在认为我需要在24小时内发送电子邮件,而不是30分钟.
一段时间以来一直在与这种奇怪的不一致作斗争,我以为我已经弄清楚它为什么这样做并使用上面的时区调整我的计算但是没有做到这一点:(.这当然看起来有些奇怪我希望这会发生错误:
//Today is 10/12
var eveningRun = moment().startOf('day'); //10/12/2013 - 00:00:00
eveningRun.hour(19).minute(30); //10/12/2013 - 19:30
eveningRun.add('minutes', diffTZ); //10/13/2013 - 2:30 am
Run Code Online (Sandbox Code Playgroud)
这种方法有效,直到某个时候它决定"今天"实际上是10/13并且设定晚上运行将在10月14日进行.非常感谢帮助,或者如果这是一个错误,我很想知道我可以做些什么来解决这个问题直到它解决了.
Mat*_*int 19
有没有必要来计算machineTZ,diffTZ或者添加任何分钟.只需这样做:
moment().zone(userTZ).startOf('day').hour(7).minute(0)
Run Code Online (Sandbox Code Playgroud)
但请记住,某个值420不是时区,而是时区偏移量.它只告诉您特定时间点的偏移量.由于您单方面应用它,因此在夏令时期间可能会得到错误的结果.
相反,您应该尝试使用moment-timezone插件,并执行以下操作:
moment().tz("America/Los_Angeles").startOf('day').hour(7).minute(0)
Run Code Online (Sandbox Code Playgroud)
另请参阅timezone标记wiki,特别是标题为"Time Zone!= Offset"和"IANA/Olson时区数据库"的部分.
| 归档时间: |
|
| 查看次数: |
15725 次 |
| 最近记录: |