Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Momentjs抓取今天的日期和设置时间,使其快速前进24小时_Javascript_Node.js_Timezone_Momentjs - Fatal编程技术网

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时区数据库。

我昨天刚刚找到了时刻时区,在我解决了这个问题后,我打算试一试。试一试你的建议,会让你知道它是否有效:。终于通过了!谢谢您:。