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

时间:2010-10-08 20:24:51

标签: javascript

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

10 个答案:

答案 0 :(得分:727)

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

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

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

答案 1 :(得分:175)

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

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

如果您希望最近的午夜,请使用以下代码:

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

答案 2 :(得分:40)

对象配置的单行:

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

创建元素时:

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

答案 3 :(得分:20)

我要在此处添加此内容,因为我在此页面上寻找如何在moment.js中执行此操作,而其他人也可能会这样做。

[理由:“时刻”这个词已经出现在本页的其他地方,因此搜索引擎会指向这里,moment.js已经足够广泛,可以保证在其他与日期相关的SO中提及它的频率的问题]

因此,在2.0.0及更高版本中:

date.startOf('day');

对于早期版本:

date.sod();

文档:

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

答案 4 :(得分:6)

您可以使用

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

如果您只需要一次该值。

答案 5 :(得分:4)

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

答案 6 :(得分:4)

如果使用日期计算,夏季通常会比午夜(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
    }

答案 7 :(得分:2)

如果您已将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)

答案 8 :(得分:1)

我为我做了几个原型来处理这个问题。

// 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());

答案 9 :(得分:-4)

                    var a = new Array();
					var b = new Array();
					var c = new Array();
					var date = new Date().toJSON();
					a = date.split("T");
					a = a[0];
					b = a.split("-");
					var currentDate = new Date(b[0],b[1] , b[2] -29 ,-19,30,0).toJSON();
					c = currentDate.split(".");
					var newDate = c[0];
console.log(newDate);