Javascript Momentjs抓取今天的日期和设置时间,使其快速前进24小时
我正试图根据用户的偏好来暂停电子邮件。我早上的计算是正确的,但是晚上的邮件永远不会被发送,因为日期没有按预期进行 首先,这是我用来抓取时间并根据用户位置等执行调整的代码Javascript Momentjs抓取今天的日期和设置时间,使其快速前进24小时,javascript,node.js,timezone,momentjs,Javascript,Node.js,Timezone,Momentjs,我正试图根据用户的偏好来暂停电子邮件。我早上的计算是正确的,但是晚上的邮件永远不会被发送,因为日期没有按预期进行 首先,这是我用来抓取时间并根据用户位置等执行调整的代码 var time = moment(); var machineTZ = time.zone(); var userTZ = 420; var diffTZ = userTZ - machineTZ; var oneHour = moment(time).add('minutes', 60); var morningRun
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);
我每小时都在检查,看是不是该安排另一封邮件发送了。现在这是硬编码的,但当我开始添加用户首选项时,他们将能够选择他们希望的本地时间
我一直在调试我的值以排除故障。以下是从服务器的角度来看清晨运行的作业的输出:
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
跑步人数和我预期的一样。在两个小时内,我希望晚上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?
这一直有效,直到它决定今天实际上是10月13日,并将晚间跑步改为10月14日。非常感谢您的帮助,或者如果这是一个bug,我想知道我可以做些什么来解决这个问题,直到问题得到解决。无需计算machineTZ、diffTZ或添加任何分钟。只需这样做:
moment().zone(userTZ).startOf('day').hour(7).minute(0)
moment().tz("America/Los_Angeles").startOf('day').hour(7).minute(0)
但一定要记住,像420这样的值不是时区,而是时区偏移量。它只告诉您特定时间点的偏移量。由于您是单方面应用它,因此在夏令时可能会得到错误的结果
相反,您应该尝试使用该插件,并执行以下操作:
moment().zone(userTZ).startOf('day').hour(7).minute(0)
moment().tz("America/Los_Angeles").startOf('day').hour(7).minute(0)
另请参见,特别是标题为Time Zone!=Offset和IANA/Olson时区数据库。我昨天刚刚找到了时刻时区,在我解决了这个问题后,我打算试一试。试一试你的建议,会让你知道它是否有效:。终于通过了!谢谢您:。