【发布时间】:2011-04-23 02:00:53
【问题描述】:
获取 new Date() 实例但将时间设置为午夜的最简单方法是什么?
【问题讨论】:
标签: javascript
获取 new Date() 实例但将时间设置为午夜的最简单方法是什么?
【问题讨论】:
标签: javascript
setHours 方法可以采用可选的minutes、seconds 和ms 参数,例如:
var d = new Date();
d.setHours(0,0,0,0);
这会将时间设置为您当前时区的00:00:00.000,如果您想在UTC时间工作,您可以使用setUTCHours方法。
【讨论】:
new Date(new Date().setHours(0,0,0,0))。
new Date(new Date('2021-04-29').setHours(24,0,0,0)).getDate(); // get 29
只是想澄清一下,接受答案中的 sn-p 给出了过去最近的午夜:
var d = new Date();
d.setHours(0,0,0,0); // last midnight
如果您想获得未来最近的午夜,请使用以下代码:
var d = new Date();
d.setHours(24,0,0,0); // next midnight
【讨论】:
对象配置的单行:
new Date(new Date().setHours(0,0,0,0));
创建元素时:
dateFieldConfig = {
name: "mydate",
value: new Date(new Date().setHours(0, 0, 0, 0)),
}
【讨论】:
toISOString() 检查您的日期。最安全的方法是使用setUTCHours,如果你想让它与零 UTC 偏移兼容。
【讨论】:
moment(DATE_OBJECT).startOf('day').toDate();
你可能会使用
new Date().setUTCHours(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 的过期时间。
【讨论】:
我已经制作了几个原型来为我处理这个问题。
// 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());
【讨论】:
如果您的项目中已经有 d3.js 作为依赖项,或者不介意引入它,d3-time (d3.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)
【讨论】: