我需要在JavaScript中增加一天的日期值。
例如,我有一个日期值2010-09-11,我需要将第二天的日期存储在一个JavaScript变量中。
如何将日期增加一天?
我需要在JavaScript中增加一天的日期值。
例如,我有一个日期值2010-09-11,我需要将第二天的日期存储在一个JavaScript变量中。
如何将日期增加一天?
当前回答
Date.prototype.AddDays = function (days) {
days = parseInt(days, 10);
return new Date(this.valueOf() + 1000 * 60 * 60 * 24 * days);
}
例子
var dt = new Date();
console.log(dt.AddDays(-30));
console.log(dt.AddDays(-10));
console.log(dt.AddDays(-1));
console.log(dt.AddDays(0));
console.log(dt.AddDays(1));
console.log(dt.AddDays(10));
console.log(dt.AddDays(30));
结果
2017-09-03T15:01:37.213Z
2017-09-23T15:01:37.213Z
2017-10-02T15:01:37.213Z
2017-10-03T15:01:37.213Z
2017-10-04T15:01:37.213Z
2017-10-13T15:01:37.213Z
2017-11-02T15:01:37.213Z
其他回答
这个方法更简单, 它会以简单的yyyy-mm-dd格式返回日期,就是这个
function incDay(date, n) {
var fudate = new Date(new Date(date).setDate(new Date(date).getDate() + n));
fudate = fudate.getFullYear() + '-' + (fudate.getMonth() + 1) + '-' + fudate.toDateString().substring(8, 10);
return fudate;
}
例子:
var tomorrow = incDay(new Date(), 1); // the next day of today , aka tomorrow :) .
var spicaldate = incDay("2020-11-12", 1); // return "2020-11-13" .
var somedate = incDay("2020-10-28", 5); // return "2020-11-02" .
Note
incDay(new Date("2020-11-12"), 1);
incDay("2020-11-12", 1);
将返回相同的结果。
JavaScript日期的时区/夏令时感知日期增量:
function nextDay(date) {
const sign = v => (v < 0 ? -1 : +1);
const result = new Date(date.getTime());
result.setDate(result.getDate() + 1);
const offset = result.getTimezoneOffset();
return new Date(result.getTime() + sign(offset) * offset * 60 * 1000);
}
使用dateObj.toJSON()方法获取日期的字符串值参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toJSON 从返回值中切片日期,然后增加所需的天数。
var currentdate = new Date();
currentdate.setDate(currentdate.getDate() + 1);
var tomorrow = currentdate.toJSON().slice(0,10);
使用这个函数,它解决了我的问题:
let nextDate = (daysAhead:number) => {
const today = new Date().toLocaleDateString().split('/')
const invalidDate = new Date(`${today[2]}/${today[1]}/${Number(today[0])+daysAhead}`)
if(Number(today[1]) === Number(12)){
return new Date(`${Number(today[2])+1}/${1}/${1}`)
}
if(String(invalidDate) === 'Invalid Date'){
return new Date(`${today[2]}/${Number(today[1])+1}/${1}`)
}
return new Date(`${today[2]}/${Number(today[1])}/${Number(today[0])+daysAhead}`)
}
你有三个选择:
1. 仅使用JavaScript的Date对象(没有库):
我之前对第一个问题的回答是错误的(它增加了24小时,没有考虑到日光节约时间的转换;Clever Human指出,它将在东部时区的2010年11月7日失效)。相反,Jigar的答案是在没有库的情况下做到这一点的正确方法:
// To do it in local time
var tomorrow = new Date();
tomorrow.setDate(tomorrow.getDate() + 1);
// To do it in UTC
var tomorrow = new Date();
tomorrow.setUTCDate(tomorrow.getUTCDate() + 1);
这甚至适用于一个月(或一年)的最后一天,因为JavaScript date对象在翻转方面很聪明:
//本地时间 var lastDayOf2015 =新的日期(2015,11,31); console.log(" 2015年最后一天:" + lastDayOf2015.toISOString()); var nextDay =新的日期(+lastDayOf2015); var dateValue = nextDay.getDate() + 1; console.log("将日期部分设置为" + dateValue "); nextDay.setDate (dateValue); console.log("结果日期:" + nextDay.toISOString());
2. 使用MomentJS:
var today = moment();
var tomorrow = moment(today).add(1, 'days');
(注意,add会修改调用它的实例,而不是返回一个新实例,所以今天。Add (1, 'days')将修改为今天。这就是为什么我们开始克隆var明天= ....)
3.使用DateJS,但它没有更新很长一段时间:
var today = new Date(); // Or Date.today()
var tomorrow = today.add(1).day();