获取new Date()实例但将时间设置为午夜的最简单方法是什么?
当前回答
让@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的过期时间。
其他回答
sehours方法可以采用可选的minutes, seconds和ms参数,例如:
var d = new Date();
d.setHours(0,0,0,0);
这将把时间设置为当前时区的00:00:00.000,如果你想在UTC时间工作,你可以使用setUTCHours方法。
只是在这里添加这个,因为我在这个页面上寻找如何在moment.js中做到这一点,其他人也可能会这样做。
[理由:“时刻”这个词已经出现在本页的其他地方,所以搜索引擎直接指向这里,而moment.js的广泛应用足以保证在其他与日期相关的so问题中被提及的频率]
因此,在2.0.0及以上版本中:
date.startOf('day');
对于早期版本:
date.sod();
文档:
http://momentjs.com/docs/#/manipulating/start-of/
你可以用
new Date().setUTCHours(0,0,0,0)
如果您只需要该值一次。
只是想澄清一下,接受答案的片段给出了过去最近的午夜:
var d = new Date();
d.setHours(0,0,0,0); // last midnight
如果你想在将来得到最近的午夜,使用下面的代码:
var d = new Date();
d.setHours(24,0,0,0); // next midnight
让@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的过期时间。