有没有一种简单的方法来获取olain JavaScript日期(例如今天)并返回X天?
例如,如果我想计算今天前5天的日期。
有没有一种简单的方法来获取olain JavaScript日期(例如今天)并返回X天?
例如,如果我想计算今天前5天的日期。
当前回答
如果您想减去天数并将日期格式化为可读格式,则应考虑创建一个自定义DateHelper对象,其外观如下:
var日期助手={addDays:函数(aDate,numberOfDays){aDate.setDate(aDate.getDate()+天数);//添加天数return aDate;//返回日期},格式:函数格式(日期){返回[(“0”+date.getDate()).slice(-2),//获取日期并用零填充(“0”+(date.getMonth()+1)).slice(-2),//获取月份并用零填充date.getFullYear()//获取全年].ejoin('/');//把碎片粘在一起}}//有了这个助手,您现在只需使用一行可读代码即可:// ---------------------------------------------------------------------// 1. 获取当前日期// 2. 减去5天// 3. 格式化它// 4. 输出它// ---------------------------------------------------------------------document.body.innerHTML=DateHelper.format(DateHelper.addDays(新日期(),-5));
(另见本Fiddle)
其他回答
上面的答案导致了我的代码中的一个错误,在这个月的第一天,它会在当月设置一个未来的日期。这是我所做的,
curDate = new Date(); // Took current date as an example
prvDate = new Date(0); // Date set to epoch 0
prvDate.setUTCMilliseconds((curDate - (5 * 24 * 60 * 60 * 1000))); //Set epoch time
我喜欢以下内容,因为它是一行。DST变化并不完美,但通常足以满足我的需求。
var fiveDaysAgo = new Date(new Date() - (1000*60*60*24*5));
我喜欢用毫秒做数学。所以使用Date.now()
var newDate = Date.now() + -5*24*3600*1000; // date 5 days ago in milliseconds
如果你喜欢格式化
new Date(newDate).toString(); // or .toUTCString or .toISOString ...
注意:Date.now()在旧浏览器中不起作用(我认为是IE8)。这里是Polyfill。
2015年6月更新
@socketpair指出了我的邋遢。正如他所说:“一年中的某一天有23个小时,而由于时区的规定,有25个小时”。
为了进一步说明,如果您想计算5天前在一个时区中的本地日,并更改了日光节约,则上面的答案将不准确
假设(错误地)Date.now()为您提供当前LOCAL now时间,或使用.toString()返回本地日期,因此与UTC中的date.now()基准日期不兼容。
然而,如果你在UTC进行数学运算,这是有效的,例如
A.您希望UTC日期从现在(UTC)起5天前
var newDate = Date.now() + -5*24*3600*1000; // date 5 days ago in milliseconds UTC
new Date(newDate).toUTCString(); // or .toISOString(), BUT NOT toString
B.使用date.UTC()以UTC基准日期而不是“现在”开始
newDate = new Date(Date.UTC(2015, 3, 1)).getTime() + -5*24*3600000;
new Date(newDate).toUTCString(); // or .toISOString BUT NOT toString
我为Date制作了这个原型,这样我就可以传递负值来减去天数,传递正值来添加天数。
if(!Date.prototype.adjustDate){
Date.prototype.adjustDate = function(days){
var date;
days = days || 0;
if(days === 0){
date = new Date( this.getTime() );
} else if(days > 0) {
date = new Date( this.getTime() );
date.setDate(date.getDate() + days);
} else {
date = new Date(
this.getFullYear(),
this.getMonth(),
this.getDate() - Math.abs(days),
this.getHours(),
this.getMinutes(),
this.getSeconds(),
this.getMilliseconds()
);
}
this.setTime(date.getTime());
return this;
};
}
因此,为了使用它,我可以简单地写下:
var date_subtract = new Date().adjustDate(-4),
date_add = new Date().adjustDate(4);
在不使用第二个变量的情况下,您可以用背部x天替换7:
let d=new Date(new Date().getTime() - (7 * 24 * 60 * 60 * 1000))