获取new Date()实例但将时间设置为午夜的最简单方法是什么?
当前回答
如果用日期计算,夏季时间通常会比午夜(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
}
其他回答
对象配置的一行代码:
new Date(new Date().setHours(0,0,0,0));
创建元素时:
dateFieldConfig = {
name: "mydate",
value: new Date(new Date().setHours(0, 0, 0, 0)),
}
如果用日期计算,夏季时间通常会比午夜(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
}
让@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的过期时间。
只是想澄清一下,接受答案的片段给出了过去最近的午夜:
var d = new Date();
d.setHours(0,0,0,0); // last midnight
如果你想在将来得到最近的午夜,使用下面的代码:
var d = new Date();
d.setHours(24,0,0,0); // next midnight
如果您已经在项目中有d3.js作为依赖项,或者不介意引入它,d3-time (d3.js库在v4.0.0中是模块化的)有interval。
在将日期设置为“默认”值时,它们可能很有用,例如午夜、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)