获取new Date()实例但将时间设置为午夜的最简单方法是什么?


当前回答

让@Dan的例子更有用的是,我需要找到下一个中午或午夜。

var d = new Date();
if(d.getHours() < 12) {
   d.setHours(12,0,0,0); // next midnight/midday is midday
} else {
   d.setHours(24,0,0,0); // next midnight/midday is midnight
}

这允许我为一个事件设置频率上限,只允许它在上午发生一次,对我网站的任何访问者来说,只允许它在下午发生一次。捕获的日期用于设置cookie的过期时间。

其他回答

使用dayjs库,你可以使用startOf('day')方法。

const dayjs = require('dayjs');

const todayAtMidnight= dayjs().startOf('day');

// Get as a native date object
console.log(todayAtMidnight.toDate());

要开始特定的一天,你可以使用以下命令:

const date = dayjs("2023-02-12").startOf('day');

只是想澄清一下,接受答案的片段给出了过去最近的午夜:

var d = new Date();
d.setHours(0,0,0,0); // last midnight

如果你想在将来得到最近的午夜,使用下面的代码:

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

对象配置的一行代码:

new Date(new Date().setHours(0,0,0,0));

创建元素时:

dateFieldConfig = {
      name: "mydate",
      value: new Date(new Date().setHours(0, 0, 0, 0)),
}

sehours方法可以采用可选的minutes, seconds和ms参数,例如:

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

这将把时间设置为当前时区的00:00:00.000,如果你想在UTC时间工作,你可以使用setUTCHours方法。

如果用日期计算,夏季时间通常会比午夜(CEST)多1小时或少1小时。当日期返回时,这将导致1天的差异。所以日期必须四舍五入到最近的午夜。所以代码将是(感谢jamisOn):

    var d = new Date();
    if(d.getHours() < 12) {
    d.setHours(0,0,0,0); // previous midnight day
    } else {
    d.setHours(24,0,0,0); // next midnight day
    }