将JavaScript日期初始化为午夜的最佳方法是什么?

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

飞羽2020/03/16 15:07:21

如果您已经在项目中将d3.js作为依赖项,或者不介意将其引入,则d3-timed3.js库从v4.0.0开始是模块化的)具有Intervals

当将日期设置为“默认”值(例如午夜,0.00秒,每月的第一天等)时,它们可能会有用。

var d = new Date(); // Wed Aug 02 2017 15:01:07 GMT+0200 (CEST)
d3.timeHour(d) // Wed Aug 02 2017 00:00:00 GMT+0200 (CEST)
d3.timeMonth(d) // Tue Aug 01 2017 00:00:00 GMT+0200 (CEST)
乐米亚2020/03/16 15:07:21

如果计算日期,夏季通常会比午夜(CEST)多造成1欧元或少1小时。日期返回时,这会导致1天的差异。因此,日期必须四舍五入到最近的午夜。因此,代码将是(thamisOn):

    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
    }
樱Tony2020/03/16 15:07:21

您可能可以使用

new Date().setUTCHours(0,0,0,0)

如果您只需要一次该值。

猪猪Harry泡芙2020/03/16 15:07:20

setHours方法可以采取可选的minutessecondsms参数,例如:

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

这样会将时间设置00:00:00.000当前时区,如果您想使用UTC时间,则可以使用该setUTCHours方法。

GOTom2020/03/16 15:07:20

为@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的过期时间。

凯梅小胖2020/03/16 15:07:20

对象配置的一线式:

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

创建元素时:

dateFieldConfig = {
      name: "mydate",
      value: new Date(new Date().setHours(0, 0, 0, 0)),
}
A小卤蛋2020/03/16 15:07:20

只是想说明一下,已接受答案的摘录给出了过去最近的午夜

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

如果要在将来获得最近的午夜,请使用以下代码:

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