例如,我有一个日期值2010-09-11,我需要将第二天的日期存储在JavaScript变量中。
如何将日期增加一天?
#1 楼
三个选项供您选择:1。仅使用JavaScript的
Date
对象(不使用库):我以前对#1的回答是错误的(它增加了24小时,未能考虑到夏时制的转换; Clever Human指出了这一点)将会在东部时区于2010年11月7日失败)。相反,Jigar的答案是不使用库即可执行此操作的正确方法:
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。)
2。使用MomentJS:
var today = moment();
var tomorrow = moment(today).add(1, 'days');
(请注意,
add
会修改您调用的实例,而不是返回新实例,因此today.add(1, 'days')
会修改today
。这就是我们开始的原因在var tomorrow = ...
上执行克隆操作。)3。使用DateJS,但很长时间没有更新:
var today = new Date(); // Or Date.today()
var tomorrow = today.add(1).day();
评论
但是我使用document.getElementById(“ arrival_date”)。value在变量中有日期2010-09-11,它显示了无效的日期
–圣塔努
2010年9月9日在7:37
@santanu:这是一个完全不同的问题:日期解析(通过解释字符串获取日期)。如果该格式是静态的,则可以自己解析它,并将结果输入到Date构造函数中(新的Date(年,月,日));参见规范的15.9.2.1;如果您想接受多种格式,一定要看一下DateJS。
– T.J.拥挤者
2010年9月9日在8:12
@santanu:继续进行上述操作:某些浏览器可以使用Date.parse成功解析该格式(该格式返回毫秒数,然后您可以将其输入新的Date(ms))。但要注意,这可能因浏览器而异。直到最近,实现几乎可以完成Date.parse中他们想做的任何事情。现在,新的第5版规范具有必须接受的最小格式,但是我还没有想到。
– T.J.拥挤者
2010年9月9日在8:18
我只是想在Date实例中添加第二个实例;这对我有用x = new Date(); x2 =新的Date(x.getTime()+ 1000),其中1000是毫秒增量。
– Berto
2014年12月5日19:42
@piavgh:第一个解决方案没有什么问题,这只是您的使用方式。日期对象是可变的。您将同一Date对象存储在数组中三次。如果需要三个不同的Date对象,则必须创建三个对象:var unavailableDates = [];对于(var d = new Date('2017-05-11'); d
– T.J.拥挤者
17年5月12日在6:54
#2 楼
var myDate = new Date();
//add a day to the date
myDate.setDate(myDate.getDate() + 1);
评论
但是我使用document.getElementById(“ arrival_date”)。value在变量中有日期2010-09-11,它显示了无效的日期
–圣塔努
2010年9月9日于7:35
@sanatu:在这种情况下,您需要以浏览器可以接受的方式格式化字符串。 Chrome接受新的Date(“ 2009-09-11”),但Firefox不接受。我认为大多数浏览器都接受新的Date(“ 2009/09/11”),因此一个简单的解决方案是var到达日期= document.getElementById('arival_date')。value; var dayAfter = new Date(arrival_date.replace(/-/ g,'/')); dayAfter.setDate(dayAfter.getDate()+ 1);。
– David Hedlund
2010年9月9日在7:43
比将/替换为/并希望浏览器会接受的方法更可靠的方法是将字符串分为以下部分:var dateParts = arrivalDate.split('-'); var y = parseInt(dateParts [0],10); var m = parseInt(dateParts [1],10); var d = parseInt(dateParts [2],10); var dayAfter = new Date(y,m-1,d + 1);请注意,我们在这里使用m-1,因为javascript月份是枚举值(一月是0,而不是1),而d + 1是因为我们已经在初始赋值中进行了递增(它将自动修正为Feb 29等)
– David Hedlund
2010年9月9日于7:50
#3 楼
最简单的方法是转换为毫秒并添加1000 * 60 * 60 * 24毫秒,例如:var tomorrow = new Date(today.getTime()+1000*60*60*24);
评论
我喜欢这个整数表示法则。
– exebook
17年2月24日在10:55
这是最好的答案。可以根据需要轻松增加/减少几天;只需乘以1000 * 60 * 60 * 24 x DaysToBeAdded
–哈利勒·哈拉夫(Khalil Khalaf)
17年7月12日在16:00
或者,new Date(+ new Date()+ 1000 * 60 * 60 * 24),但实际上实际上类似于getTime()/ setTime()。
–波兰
1月7日14:09
除非您的日期是UTC或没有夏令时的其他时区,否则请不要这样做。否则,每年2天,它将产生意外的结果。
–意大利PaleAle
3月28日22:24
一线式:new Date(Date.now()+ 1000 * 60 * 60 * 24);
–爱颜
4月13日13:01
#4 楼
明天用纯JS排成一行,但是很丑!new Date(new Date().setDate(new Date().getDate() + 1))
结果是:
Thu Oct 12 2017 08:53:30 GMT+0200 (Romance Summer Time)
评论
一行正是我对Vue.js表达式所需要的,因为我必须删除一个参数,并且没有地方可以设置和添加多行。谢谢!
–皮质
8月9日7:47
#5 楼
此答案中的所有示例似乎都不适用于夏令时调整日。在那几天,一天中的小时数不是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());
#6 楼
首先,您需要先解析您的字符串,然后再遵循其他人的建议: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,这将对您有很大帮助。
#7 楼
我觉得没有什么比.getTime()
和.setTime()
更安全的了,所以这应该是最好的,而且性能也很高。 const d = new Date()
console.log(d.setTime(d.getTime() + 1000 * 60 * 60 * 24)) // MILLISECONDS
.setDate()
表示无效的日期(例如31 + 1)太危险了,这取决于浏览器的实现。#8 楼
接下来的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)
}
评论
尝试了以上答案,但没有成功。您的代码就像一个魅力。谢谢!
–暗淡
18-09-20在10:06
#9 楼
两种方法: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)
#10 楼
要通过一天的JS添加一天,您可以执行以下操作:let date = new Date(); // today
date.setDate(date.getDate() + 1) // tomorrow
另一种选择是使用
moment
库:const date = moment().add(14, "days").toDate()
评论
请解释此代码的作用。添加有关如何解决OP问题的详细信息。
–睫毛
19-09-20在9:33
#11 楼
使用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);
评论
Date.toJSON使用UTC时区stackoverflow.com/questions/11382606/…
– AndreyP
17年4月20日在12:33
#12 楼
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
评论
您的代码无效。我已经在第一个console.log()中尝试过了,它说:dt.AddDays()不是函数。
– Adrian2895
19年5月20日在11:59
#13 楼
不能完全确定它是否为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
#14 楼
结果以字符串形式表示明天的日期。使用新的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 楼
用香草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
以防万一,除了日期(天)以外,有人想要递增其他值
#16 楼
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);
}
#17 楼
这是一个更简单的方法,它将以简单的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);
将返回相同的结果。
评论
这回答了你的问题了吗?为JavaScript日期添加天数