获取javascript中下一次出现的日期和时间

获取javascript中下一次出现的日期和时间,javascript,date,Javascript,Date,我正在尝试实现一个倒计时计时器,在未来的特定时间点。此时间点始终是一周中的同一天和同一小时,并基于UTC时间 我试图编写一个通用函数,给定一周中的一天和一小时,它将返回一个日期对象,表示将来的标准 示例: getnextocreanceofutcdayandhour(1,7) 获取下一个星期一上午7点的事件。如果今天是2015年5月25日星期一@UTC午夜,则此函数应返回表示2015年1月6日星期一UTC上午7点的日期对象 getnextocreanceofutcdayandhour(3,13)

我正在尝试实现一个倒计时计时器,在未来的特定时间点。此时间点始终是一周中的同一天和同一小时,并基于UTC时间

我试图编写一个通用函数,给定一周中的一天和一小时,它将返回一个日期对象,表示将来的标准

示例:

getnextocreanceofutcdayandhour(1,7)

获取下一个星期一上午7点的事件。如果今天是2015年5月25日星期一@UTC午夜,则此函数应返回表示2015年1月6日星期一UTC上午7点的日期对象

getnextocreanceofutcdayandhour(3,13)

获取下一个星期三下午1点的事件。如果今天是2015年5月26日星期二@UTC午夜,则此函数应返回表示UTC 2015年5月27日星期三下午1点的日期对象

我曾尝试编写一个函数来实现这一点,并在下面包含了代码段,但它似乎只适用于某些日期,而不适用于其他日期。这是难以置信的不可靠。我不想使用Moment.js

函数getnextocuranceofutcdayandhour(天,小时){
d=新日期();
d、 设置日期(d.getUTCDate()+(7+天-d.getUTCDay())%7)
d、 设定值(小时,0,0,0);
返回d;
}
函数格式_秒(t){
var d=数学层(t/86400);
var h=数学下限(t%86400/3600);
var m=数学下限(t%3600/60);
var s=数学下限(t%3600%60);
返回((d>0?d+d.:“”)+
(h>0?h+h.:“”)+
(m>0?m+m.:“”)+
s+“s.”;
}
函数更新(){
var next_occurance=GetNextToCuranceOfTcdayandHour(1,7);
$('下一次发生').text(下一次发生);
var ms=下一个事件-新日期();
$('倒计时').text(格式为秒(数学地板(ms/1000));
}
$(函数(){
更新();
设置间隔(更新,1000);
});

下一次发生


倒计时

原始代码中的问题是使用了
d.setDate()而不是
d.setUTCDate()。此外,如果当前日期与目标日期在一周中的同一天,则结果不正确。只需添加一个if语句来检查这种情况,就可以解决这个问题


更新的JSFIDLE:

你能提供一些日期有效和无效的示例吗?当然,给你:第二个示例为我返回星期一(我的时区是UTC+02:00)…即使在
返回d
的末尾有
.toutString()
。我不明白为什么它在我的时区无效,考虑到我只使用UTC函数和UTC时间。我的时区是UTC-7。好吧,您的方法调用之一仍然是
d.setDate
,而不是
d.setUTCDate
,尽管它不能解决问题…