如何在JavaScript中获取下一个上午9点?

时间:2018-11-07 16:57:12

标签: javascript

我正尝试每24小时在特定时间(上午9点而不是午夜)重置计时器。下面给出了下一个午夜。现在如何获得下一个上午9点?

var d = new Date();
d.setHours(24,0,0,0);

3 个答案:

答案 0 :(得分:3)

如果您的意思是第二天上午9点,无论当前时间是上午9点还是下午9点之后,有趣的是您都可以这样做,只需将9加到24即可得出33(不,实际上):

function setNextDay9(dt) {
  dt.setHours(33, 0, 0, 0);
}

// Test with start time before 9 a.m.
var d1 = new Date(2018, 10, 7, 7);
console.log("before", d1.toISOString());
setNextDay9(d1);
console.log("after ", d1.toISOString());

// Test with start time after 9 a.m.
var d2 = new Date(2018, 10, 7, 11);
console.log("before", d2.toISOString());
setNextDay9(d2);
console.log("after ", d2.toISOString());

JavaScript的Date对象以这种方式(根据规范)处理过渡。

如果您的意思是下一个上午9点(如果上午9点之前是同一天,如果之后则是第二天),则需要分支:

function setNext9(dt) {
  dt.setHours(dt.getHours() < 9 ? 9 : 33);
}

// Test with start time before 9 a.m.
var d1 = new Date(2018, 10, 7, 7);
console.log("before", d1.toISOString());
setNext9(d1);
console.log("after ", d1.toISOString());

// Test with start time after 9 a.m.
var d2 = new Date(2018, 10, 7, 11);
console.log("before", d2.toISOString());
setNext9(d2);
console.log("after ", d2.toISOString());

JavaScript的Date对象以这种方式(根据规范)处理过渡。

答案 1 :(得分:1)

如果您要处理时间,我强烈建议您使用moment.js

var nineAm = moment().hour(9) // will set the time to 9am

if moment().hour() === 9 {
    //reset time
}

答案 2 :(得分:0)

var d = new Date(); 
d.setHours(9,0,0,0)
let tomorrow = d.setDate(d.getDate() +1)

将返回一个时间戳,以将其转换回可读的日期