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

f8rj6qna  于 2022-12-10  发布在  Java
关注(0)|答案(9)|浏览(167)

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

deikduxw

deikduxw1#

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

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

这会将时间设置为00:00:00.000 of your current timezone,如果您希望在UTC时间工作,可以使用setUTCHours方法。

t9aqgxwy

t9aqgxwy2#

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

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

如果要获取未来最接近午夜的时间,请使用以下代码:

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

ddarikpa3#

对象配置的一行程序:

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

建立元素时:

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

zkure5ic4#

只是要在这里添加这个,因为我在这个页面上寻找如何在moment.js和其他人可能也这样做。
[理由:“时刻”一词已出现在本页的其他地方,因此搜索引擎将其指向此处,并且moment.js的广泛性足以保证其在其他与日期相关的SO问题中被提及的频率]
因此,在2.0.0及更高版本中:

date.startOf('day');

对于早期版本:

date.sod();

文件:
http://momentjs.com/docs/#/manipulating/start-of/

pdkcd3nj

pdkcd3nj5#

您可以使用

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

如果您只需要该值一次。

bqjvbblv

bqjvbblv6#

如果用日期计算,夏季时间通常会比午夜(CEST)多或少一个小时。这会导致日期返回时相差一天。因此日期必须舍入到最近的午夜。因此代码将是(感谢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
    }
8e2ybdfx

8e2ybdfx7#

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

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的过期日期。

tvokkenx

tvokkenx8#

我已经做了几个原型来处理这个我。

// This is a safety check to make sure the prototype is not already defined.
Function.prototype.method = function (name, func) {
    if (!this.prototype[name]) {
        this.prototype[name] = func;
        return this;
    }
};

Date.method('endOfDay', function () {
    var date = new Date(this);
    date.setHours(23, 59, 59, 999);
    return date;
});

Date.method('startOfDay', function () {
    var date = new Date(this);
    date.setHours(0, 0, 0, 0);
    return date;
});

如果您不想进行安全检查,则可以使用

Date.prototype.startOfDay = function(){
  /*Method body here*/
};

示例用法:

var date = new Date($.now()); // $.now() requires jQuery
console.log('startOfDay: ' + date.startOfDay());
console.log('endOfDay: ' + date.endOfDay());
gr8qqesn

gr8qqesn9#

如果您已经将d3.js作为项目中的依赖项,或者不介意引入它,d3-timed3.js library is modular as of 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)

相关问题