有没有一种简单的方法来获取olain JavaScript日期(例如今天)并返回X天?
例如,如果我想计算今天前5天的日期。
有没有一种简单的方法来获取olain JavaScript日期(例如今天)并返回X天?
例如,如果我想计算今天前5天的日期。
当前回答
一些人建议在js中处理日期时,使用moment.js让您的生活更轻松。这些答案已经过去了,值得注意的是,moment.js的作者现在不鼓励使用它。主要是因为它的大小和缺乏树木摇晃支撑。
如果你想走图书馆路线,可以选择像卢克逊这样的其他路线。它比moment.js小得多(因为它巧妙地使用了Intl对象并支持树抖动),而且功能也和moment.js一样多。
要从今天起5天回到卢克逊,您需要:
import { DateTime } from 'luxon'
DateTime.now().minus({ days: 5 });
其他回答
试试这样的
dateLimit = (curDate, limit) => {
offset = curDate.getDate() + limit
return new Date( curDate.setDate( offset) )
}
currDate可以是任何日期
限制可以是天数的差异(未来为正值,过去为负值)
我喜欢用毫秒做数学。所以使用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 numberOfDays = 10;//number of days need to deducted or added
var date = "01-01-2018"// date need to change
var dt = new Date(parseInt(date.substring(6), 10), // Year
parseInt(date.substring(3,5), 10) - 1, // Month (0-11)
parseInt(date.substring(0,2), 10));
var new_dt = dt.setMilliseconds(dt.getMilliseconds() - numberOfDays*24*60*60*1000);
new_dt = new Date(new_dt);
var changed_date = new_dt.getDate()+"-"+(new_dt.getMonth()+1)+"-"+new_dt.getFullYear();
希望有帮助
一些现有的解决方案很接近,但并不完全符合我的要求。此函数可处理正值或负值,并处理边界情况。
function addDays(date, days) {
return new Date(
date.getFullYear(),
date.getMonth(),
date.getDate() + days,
date.getHours(),
date.getMinutes(),
date.getSeconds(),
date.getMilliseconds()
);
}
在不使用第二个变量的情况下,您可以用背部x天替换7:
let d=new Date(new Date().getTime() - (7 * 24 * 60 * 60 * 1000))