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

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

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

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

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

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

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

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

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

只是在这里添加这个,因为我登陆这个页面寻找如何做到这一点在moment.js和其他人也可以做。

[理由:在这个页面的其他地方已经出现了“时刻”这个词,所以search引擎直接在这里,而且moment.js是足够普遍的,足以保证被覆盖,在其他date相关的SO问题中经常提到]

所以,在2.0.0及以上版本中:

 date.startOf('day'); 

对于早期版本:

 date.sod(); 

文档:

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

对象configuration的一行代码:

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

创build元素时:

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

在@ Dan的例子中增加了用处,我有必要find下一个午夜或午夜。

 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 } 

这使我可以为一个事件设置一个频率上限,只允许在上午和下午对我的网站访问者进行一次。 捕获的date被用来设置cookie的到期date。

如果以date计算,夏季常常会比午夜(CEST)多一小时或一小时。 当date返回时,这会导致1天的差异。 所以date必须轮到最近的午夜。 所以代码将是(这样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 } 

你可以使用

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

如果你只需要这个值一次。

如果你的项目中已经有d3.js作为依赖,或者不介意, d3-time ( d3.js库是v4.0.0的模块 )已经得到间隔 。

将date设置为“默认”值时,它们可能会有用,例如午夜,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) 
  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);