我需要在JavaScript中将日期值增加一天。
例如,我有一个日期值2010-09-11,我需要将第二天的日期存储在JavaScript变量中。
如何将日期增加一天?
答案 0 :(得分:645)
为您提供三种选择:
Date
对象(无库):我之前对#1的回答是错误的(它增加了24小时,没有考虑到夏令时的转换; Clever Human指出它会在2010年11月7日在东部时区失败) 。相反,Jigar's answer是没有库的正确方法:
var tomorrow = new Date();
tomorrow.setDate(tomorrow.getDate() + 1);
这甚至可以在一个月(或一年)的最后一天使用,因为JavaScript日期对象非常适合翻转:
var lastDayOf2015 = new Date(2015, 11, 31);
snippet.log("Last day of 2015: " + lastDayOf2015.toISOString());
var nextDay = new Date(+lastDayOf2015);
var dateValue = nextDay.getDate() + 1;
snippet.log("Setting the 'date' part to " + dateValue);
nextDay.setDate(dateValue);
snippet.log("Resulting date: " + nextDay.toISOString());
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="//tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
(这个答案目前已经被接受了,所以我无法删除它。在它被接受之前我向OP建议他们接受Jigar的,但也许他们接受了这个用于列表上的第2或第3项。)
var today = moment();
var tomorrow = moment(today).add(1, 'days');
(请注意add
修改您调用它的实例,而不是返回一个新实例,因此today.add(1, 'days')
会修改today
。这就是为什么我们开始使用克隆操作{ {1}}。)
var tomorrow = ...
答案 1 :(得分:151)
var myDate = new Date();
//add a day to the date
myDate.setDate(myDate.getDate() + 1);
答案 2 :(得分:30)
此答案中的所有示例似乎都不适用于夏令时调整天。在那些日子里,一天中的小时数不是24小时(它们是23或25,取决于你是“向前弹跳”还是“倒退”。)
以下AddDays javascript函数占夏令时:
function addDays(date, amount) {
var tzOff = date.getTimezoneOffset() * 60 * 1000,
t = date.getTime(),
d = new Date(),
tzOff2;
t += (1000 * 60 * 60 * 24) * amount;
d.setTime(t);
tzOff2 = d.getTimezoneOffset() * 60 * 1000;
if (tzOff != tzOff2) {
var diff = tzOff2 - tzOff;
t += diff;
d.setTime(t);
}
return d;
}
以下是我用来测试函数的测试:
var d = new Date(2010,10,7);
var d2 = AddDays(d, 1);
document.write(d.toString() + "<br />" + d2.toString());
d = new Date(2010,10,8);
d2 = AddDays(d, -1)
document.write("<hr /><br />" + d.toString() + "<br />" + d2.toString());
d = new Date('Sun Mar 27 2011 01:59:00 GMT+0100 (CET)');
d2 = AddDays(d, 1)
document.write("<hr /><br />" + d.toString() + "<br />" + d2.toString());
d = new Date('Sun Mar 28 2011 01:59:00 GMT+0100 (CET)');
d2 = AddDays(d, -1)
document.write("<hr /><br />" + d.toString() + "<br />" + d2.toString());
答案 3 :(得分:23)
最简单的方法是转换为毫秒并添加1000 * 60 * 60 * 24毫秒,例如:
var tomorrow = new Date(today.getTime()+1000*60*60*24);
答案 4 :(得分:14)
明天在纯JS的一行中,但是丑陋!
new Date(new Date().setDate(new Date().getDate() + 1))
结果如下:
Thu Oct 12 2017 08:53:30 GMT+0200 (Romance Summer Time)
答案 5 :(得分:11)
首先需要解析字符串,然后再按照其他人的建议:
var dateString = "2010-09-11";
var myDate = new Date(dateString);
//add a day to the date
myDate.setDate(myDate.getDate() + 1);
如果您希望它再次以相同的格式返回,则必须“手动”执行此操作:
var y = myDate.getFullYear(),
m = myDate.getMonth() + 1, // january is month 0 in javascript
d = myDate.getDate();
var pad = function(val) { var str = val.toString(); return (str.length < 2) ? "0" + str : str};
dateString = [y, pad(m), pad(d)].join("-");
但我建议按照其他回复中的说明获取Date.js,这对您有帮助alot。
答案 6 :(得分:8)
我觉得没有什么比.getTime()
和.setTime()
更安全的了,所以这应该是最好的,而且性能也很好。
const d = new Date()
console.log(d.setTime(d.getTime() + 1000 * 60 * 60 * 24)) // MILLISECONDS
.setDate()
表示无效的日期(例如31 + 1)太危险了,这取决于浏览器的实现。
答案 7 :(得分:2)
接下来的5天:
var date = new Date(),
d = date.getDate(),
m = date.getMonth(),
y = date.getFullYear();
for(i=0; i < 5; i++){
var curdate = new Date(y, m, d+i)
console.log(curdate)
}
答案 8 :(得分:2)
两种方法:
1:
var a = new Date()
// no_of_days is an integer value
var b = new Date(a.setTime(a.getTime() + no_of_days * 86400000)
2:与之前的方法类似
var a = new Date()
// no_of_days is an integer value
var b = new Date(a.setDate(a.getDate() + no_of_days)
答案 9 :(得分:1)
使用dateObj.toJSON()方法获取日期的字符串值Ref: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);
答案 10 :(得分: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);
}
答案 11 :(得分:0)
使用这个功能,它解决了我的问题:
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}`)
}
答案 12 :(得分:0)
这是一个更简单的方法, 它将以简单的 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" .
注意
incDay(new Date("2020-11-12"), 1);
incDay("2020-11-12", 1);
将返回相同的结果。
答案 13 :(得分:0)
使用香草js递增日期的年份:
start_date_value = "01/01/2019"
var next_year = new Date(start_date_value);
next_year.setYear(next_year.getYear() + 1);
console.log(next_year.getYear()); //=> 2020
万一有人想增加日期(天)以外的其他值
答案 14 :(得分:0)
以明天的日期字符串表示结果。使用新的Date()来获取今天的日期,使用Date.getDate()和Date.setDate()添加一天,并将Date对象转换为字符串。
const tomorrow = () => {
let t = new Date();
t.setDate(t.getDate() + 1);
return `${t.getFullYear()}-${String(t.getMonth() + 1).padStart(2, '0')}-${String(
t.getDate()
).padStart(2, '0')}`;
};
tomorrow();
答案 15 :(得分:0)
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
答案 16 :(得分:0)
不完全确定它是否是BUG(经过测试的Firefox 32.0.3和Chrome 38.0.2125.101),但以下代码将在巴西(-3 GMT)失败:
Date.prototype.shiftDays = function(days){
days = parseInt(days, 10);
this.setDate(this.getDate() + days);
return this;
}
$date = new Date(2014, 9, 16,0,1,1);
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
结果:
Fri Oct 17 2014 00:01:01 GMT-0300
Sat Oct 18 2014 00:01:01 GMT-0300
Sat Oct 18 2014 23:01:01 GMT-0300
Sun Oct 19 2014 23:01:01 GMT-0200
在日期中添加一个小时,将使其完美运行(但无法解决问题)。
$date = new Date(2014, 9, 16,0,1,1);
结果:
Fri Oct 17 2014 01:01:01 GMT-0300
Sat Oct 18 2014 01:01:01 GMT-0300
Sun Oct 19 2014 01:01:01 GMT-0200
Mon Oct 20 2014 01:01:01 GMT-0200
答案 17 :(得分:-1)
const date = moment().add(14, "days").toDate() // here we add 14 days with today