有没有一种简单的方法来获取olain JavaScript日期(例如今天)并返回X天?
例如,如果我想计算今天前5天的日期。
有没有一种简单的方法来获取olain JavaScript日期(例如今天)并返回X天?
例如,如果我想计算今天前5天的日期。
当前回答
一些现有的解决方案很接近,但并不完全符合我的要求。此函数可处理正值或负值,并处理边界情况。
function addDays(date, days) {
return new Date(
date.getFullYear(),
date.getMonth(),
date.getDate() + days,
date.getHours(),
date.getMinutes(),
date.getSeconds(),
date.getMilliseconds()
);
}
其他回答
var date=新日期();var day=date.getDate();var mnth=date.getMonth()+1;var fDate=day+'/'+mnth+'/'+date.getFullYear();document.write('今天是:'+fDate);var subDate=date.setDate(date.getDate()-1);var todate=新日期(subDate);var today=todate.getDate();var tomnth=todate.getMonth()+1;var endDate=today+'/'+tomnthe+'/'+todate.getFullYear();document.write('<br>1天前是:'+endDate);
尝试以下操作:
var d = new Date();
d.setDate(d.getDate()-5);
注意,这将修改日期对象并返回更新日期的时间值。
var d=新日期();document.write('今天是:'+d.toLocaleString());d.setDate(d.getDate()-5);document.write('<br>5天前是:'+d.toLocaleString());
我喜欢用毫秒做数学。所以使用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
它是这样的:
var d = new Date(); // today!
var x = 5; // go back 5 days!
d.setDate(d.getDate() - x);
我创建了一个日期操作函数。你可以加或减任何天数、小时、分钟。
function dateManipulation(date, days, hrs, mins, operator) {
date = new Date(date);
if (operator == "-") {
var durationInMs = (((24 * days) * 60) + (hrs * 60) + mins) * 60000;
var newDate = new Date(date.getTime() - durationInMs);
} else {
var durationInMs = (((24 * days) * 60) + (hrs * 60) + mins) * 60000;
var newDate = new Date(date.getTime() + durationInMs);
}
return newDate;
}
现在,通过传递参数来调用此函数。例如,这里有一个函数调用,用于从今天起3天内获取日期。
var today = new Date();
var newDate = dateManipulation(today, 3, 0, 0, "-");