Add days to JavaScript Date
如何使用javascript向当前
您可以使用以下命令创建一个:
1 2 3 4 5 6 7 8 9 | Date.prototype.addDays = function(days) { var date = new Date(this.valueOf()); date.setDate(date.getDate() + days); return date; } var date = new Date(); alert(date.addDays(5)); |
如果需要,可以自动增加月份。例如:
8/31+1天将变为9/1。
直接使用
正确答案:
1 2 3 4 5 | function addDays(date, days) { var result = new Date(date); result.setDate(result.getDate() + days); return result; } |
回答错误:
这个答案有时提供正确的结果,但经常返回错误的年份和月份。此答案唯一有效的时间是您要添加的日期恰好是当前年份和月份。
1 2 3 4 5 6 | // Don't do it this way! function addDaysWRONG(date, days) { var result = new Date(); result.setDate(date.getDate() + days); return result; } |
证明/实例
检查这个J小提琴
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | // Correct function addDays(date, days) { var result = new Date(date); result.setDate(result.getDate() + days); return result; } // Bad Year/Month function addDaysWRONG(date, days) { var result = new Date(); result.setDate(date.getDate() + days); return result; } // Bad during DST function addDaysDstFail(date, days) { var dayms = (days * 24 * 60 * 60 * 1000); return new Date(date.getTime() + dayms); } // TEST function formatDate(date) { return (date.getMonth() + 1) + '/' + date.getDate() + '/' + date.getFullYear(); } $('tbody tr td:first-child').each(function () { var $in = $(this); var $out = $('<td/>').insertAfter($in).addClass("answer"); var $outFail = $('<td/>').insertAfter($out); var $outDstFail = $('<td/>').insertAfter($outFail); var date = new Date($in.text()); var correctDate = formatDate(addDays(date, 1)); var failDate = formatDate(addDaysWRONG(date, 1)); var failDstDate = formatDate(addDaysDstFail(date, 1)); $out.text(correctDate); $outFail.text(failDate); $outDstFail.text(failDstDate); $outFail.addClass(correctDate == failDate ?"right" :"wrong"); $outDstFail.addClass(correctDate == failDstDate ?"right" :"wrong"); }); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | body { font-size: 14px; } table { border-collapse:collapse; } table, td, th { border:1px solid black; } td { padding: 2px; } .wrong { color: red; } .right { color: green; } .answer { font-weight: bold; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"> <table> <tbody> <tr> <th colspan="4">DST Dates</th> </tr> <tr> <th>Input</th> <th>+1 Day</th> <th>+1 Day Fail</th> <th>+1 Day DST Fail</th> </tr> <tr><td>03/10/2013</td></tr> <tr><td>11/03/2013</td></tr> <tr><td>03/09/2014</td></tr> <tr><td>11/02/2014</td></tr> <tr><td>03/08/2015</td></tr> <tr><td>11/01/2015</td></tr> <tr> <th colspan="4">2013</th> </tr> <tr> <th>Input</th> <th>+1 Day</th> <th>+1 Day Fail</th> <th>+1 Day DST Fail</th> </tr> <tr><td>01/01/2013</td></tr> <tr><td>02/01/2013</td></tr> <tr><td>03/01/2013</td></tr> <tr><td>04/01/2013</td></tr> <tr><td>05/01/2013</td></tr> <tr><td>06/01/2013</td></tr> <tr><td>07/01/2013</td></tr> <tr><td>08/01/2013</td></tr> <tr><td>09/01/2013</td></tr> <tr><td>10/01/2013</td></tr> <tr><td>11/01/2013</td></tr> <tr><td>12/01/2013</td></tr> <tr> <th colspan="4">2014</th> </tr> <tr> <th>Input</th> <th>+1 Day</th> <th>+1 Day Fail</th> <th>+1 Day DST Fail</th> </tr> <tr><td>01/01/2014</td></tr> <tr><td>02/01/2014</td></tr> <tr><td>03/01/2014</td></tr> <tr><td>04/01/2014</td></tr> <tr><td>05/01/2014</td></tr> <tr><td>06/01/2014</td></tr> <tr><td>07/01/2014</td></tr> <tr><td>08/01/2014</td></tr> <tr><td>09/01/2014</td></tr> <tr><td>10/01/2014</td></tr> <tr><td>11/01/2014</td></tr> <tr><td>12/01/2014</td></tr> <tr> <th colspan="4">2015</th> </tr> <tr> <th>Input</th> <th>+1 Day</th> <th>+1 Day Fail</th> <th>+1 Day DST Fail</th> </tr> <tr><td>01/01/2015</td></tr> <tr><td>02/01/2015</td></tr> <tr><td>03/01/2015</td></tr> <tr><td>04/01/2015</td></tr> <tr><td>05/01/2015</td></tr> <tr><td>06/01/2015</td></tr> <tr><td>07/01/2015</td></tr> <tr><td>08/01/2015</td></tr> <tr><td>09/01/2015</td></tr> <tr><td>10/01/2015</td></tr> <tr><td>11/01/2015</td></tr> <tr><td>12/01/2015</td></tr> </tbody> </table> |
1 2 3 | var today = new Date(); var tomorrow = new Date(); tomorrow.setDate(today.getDate()+1); |
小心点,因为这很棘手。设置"明天"时,它只起作用,因为它的当前值与"今天"的年和月匹配。但是,设置一个像"32"这样的日期通常仍然可以很好地将其移动到下个月。
我的简单解决方案是:
1 | nextday=new Date(oldDate.getFullYear(),oldDate.getMonth(),oldDate.getDate()+1); |
此解决方案不存在夏令时问题。此外,您还可以添加/细分任何年、月、日等抵销。
1 | day=new Date(oldDate.getFullYear()-2,oldDate.getMonth()+22,oldDate.getDate()+61); |
是正确的代码。
这些答案对我来说似乎很困惑,我更喜欢:
1 2 | var ms = new Date().getTime() + 86400000; var tomorrow = new Date(ms); |
getTime()给出了自1970年以来的毫秒数,86400000是一天中的毫秒数。因此,ms包含所需日期的毫秒数。
使用毫秒构造函数提供所需的日期对象。
尝试
1 2 3 | var someDate = new Date(); var duration = 2; //In Days someDate.setTime(someDate.getTime() + (duration * 24 * 60 * 60 * 1000)); |
使用setDate()添加日期并不能解决您的问题,请尝试在2月份添加一些日期,如果尝试向其中添加新的日期,则不会产生您期望的结果。
只是花了很长时间试图弄清今年的交易是什么,而不是在遵循下面的主要例子时增加。
如果您只想在现有日期前添加N天,那么您最好只进行以下操作:
myDate.setDate(myDate.getDate() + n);
或者是长卷的版本
1 2 3 4 | var theDate = new Date(2013, 11, 15); var myNewDate = new Date(theDate); myNewDate.setDate(myNewDate.getDate() + 30); console.log(myNewDate); |
今天/明天的事情令人困惑。通过将当前日期设置为新的日期变量,您将混淆年份值。如果你从原来的日期开始工作,你不会。
如果可以,请使用moment.js。javascript没有非常好的本地日期/时间方法。下面是示例Moment的语法:
1 2 | var nextWeek = moment().add(7, 'days'); alert(nextWeek); |
1 | <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment-with-locales.min.js"> |
参考:http://momentjs.com/docs//operating/add/
我昨晚创建了这些扩展:您可以传递正值或负值;
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | var someDate = new Date(); var expirationDate = someDate.addDays(10); var previous = someDate.addDays(-5); Date.prototype.addDays = function (num) { var value = this.valueOf(); value += 86400000 * num; return new Date(value); } Date.prototype.addSeconds = function (num) { var value = this.valueOf(); value += 1000 * num; return new Date(value); } Date.prototype.addMinutes = function (num) { var value = this.valueOf(); value += 60000 * num; return new Date(value); } Date.prototype.addHours = function (num) { var value = this.valueOf(); value += 3600000 * num; return new Date(value); } Date.prototype.addMonths = function (num) { var value = new Date(this.valueOf()); var mo = this.getMonth(); var yr = this.getYear(); mo = (mo + num) % 12; if (0 > mo) { yr += (this.getMonth() + num - mo - 12) / 12; mo += 12; } else yr += ((this.getMonth() + num - mo) / 12); value.setMonth(mo); value.setYear(yr); return value; } |
1 2 | int days = 1; var newDate = new Date(Date.now() + days * 24*60*60*1000); |
科德森
1 2 3 4 5 6 7 | var days = 2; var newDate = new Date(Date.now() + days * 24*60*60*1000); document.write('Today: '); document.write(new Date()); document.write('<br/> New: '); document.write(newDate); |
最简单的解决方案。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Date.prototype.addDays = function(days) { this.setDate(this.getDate() + parseInt(days)); return this; }; // and then call var newDate = new Date().addDays(2); //+2 days console.log(newDate); // or var newDate1 = new Date().addDays(-2); //-2 days console.log(newDate1); |
派对迟到,但是如果你使用有一个优秀的插件,叫做moment:
网址:http://momentjs.com/
1 | var myDateOfNowPlusThreeDays = moment().add(3,"days").toDate(); |
http://momentjs.com/docs/操作/
还有很多其他的好东西!
编辑:由于aikeru的评论,jquery引用被删除
我知道,但有时我喜欢这样:
1 2 3 | function addDays(days) { return new Date(Date.now() + 864e5 * days); } |
感谢Jason为您的答案按预期工作,下面是您的代码和AnthonyWjones的便捷格式的混合:
1 2 3 4 5 | Date.prototype.addDays = function(days){ var ms = new Date().getTime() + (86400000 * days); var added = new Date(ms); return added; } |
setDate()的Mozilla文档并不表示它将处理月末的场景。请参阅https://developer.mozilla.org/en-us/docs/javascript/reference/global_objects/date
设置数据()
- 根据本地时间设置指定日期的月份日期(1-31)。
这就是为什么我需要增加天数时使用settime()。
我想我也会给出答案:
就个人而言,我喜欢尝试避免不必要的变量声明、方法调用和构造函数调用,因为它们在性能上都很昂贵。(当然是有原因的)
我本来打算在@anthonywjones给出的答案下留下这个评论,但我想最好还是这样。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | // Prototype usage... Date.prototype.addDays = Date.prototype.addDays || function( days ) { return this.setTime( 864E5 * days + this.valueOf() ) && this; }; // Namespace usage... namespace.addDaysToDate = function( date, days ) { return date.setTime( 864E5 * days + date.valueOf() ) && date; }; // Basic Function declaration... function addDaysToDate( date, days ) { return date.setTime( 864E5 * days + date.valueOf() ) && date; }; |
以上内容将尊重DST。也就是说,如果您添加了穿过DST的天数,则显示的时间(小时)将更改以反映这一点。
例子:
2014年11月2日02:00是夏令时结束。
1 2 3 | var dt = new Date( 2014, 10, 1, 10, 30, 0 ); console.log( dt ); // Sat Nov 01 2014 10:30:00 console.log( dt.addDays( 10 ) ); // Tue Nov 11 2014 09:30:00 |
如果您希望保留整个DST的时间(因此10:30仍然是10:30)…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | // Prototype usage... Date.prototype.addDays = Date.prototype.addDays || function( days ) { return this.setDate( this.getDate() + days ) && this; }; // Namespace usage... namespace.addDaysToDate = function( date, days ) { return date.setDate( date.getDate() + days ) && date; }; // Basic Function declaration... function addDaysToDate( date, days ) { return date.setDate( date.getDate() + days ) && date; }; |
所以,现在你……
1 2 3 | var dt = new Date( 2014, 10, 1, 10, 30, 0 ); console.log( dt ); // Sat Nov 01 2014 10:30:00 console.log( dt.addDays( 10 ) ); // Tue Nov 11 2014 10:30:00 |
我对夏令时提出的解决方案有异议。
我用
1 2 3 4 5 6 7 8 9 | // Curried, so that I can create helper functions like `add1Day` const addDays = num => date => { // Make a working copy so we don't mutate the supplied date. const d = new Date(date); d.setUTCDate(d.getUTCDate() + num); return d; } |
不,javascript没有内置函数,但是您可以使用一行简单的代码
1 | timeObject.setDate(timeObject.getDate() + countOfDays); |
在不使用第二个变量的情况下,可以将7替换为接下来的x天:
1 | let d=new Date(new Date().getTime() + (7 * 24 * 60 * 60 * 1000)); |
我使用类似的东西:
1 | new Date(dateObject.getTime() + amountOfDays * 24 * 60 * 60 * 1000) |
工作日节约时间:
1 | new Date(new Date(2014, 2, 29, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000) |
与新年共事:
1 | new Date(new Date(2014, 11, 31, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000) |
它可以参数化:
1 2 3 4 5 6 7 | function DateAdd(source, amount, step) { var factor = 1; if (step =="day") factor = 24 * 60 * 60 * 1000; else if (step =="hour") factor = 60 * 60 * 1000; ... new Date(source.getTime() + amount * factor); } |
编辑:您可以这样做,而不是使用
1 2 3 4 5 6 | Date.prototype.addDays= function(d){ this.setDate(this.getDate() + d); return this; }; var tomorrow = new Date().addDays(1); |
旧的:
不使用
1 2 3 4 5 6 | Date.prototype.addDays= function(d){ this.setHours(this.getHours() + d * 24); return this; }; var tomorrow = new Date().addDays(1); |
看到J小提琴…
在Java脚本中添加日期的非常简单的代码。
1 2 3 | var d = new Date(); d.setDate(d.getDate() + prompt('how many days you want to add write here')); alert(d); |
我正在使用以下解决方案。
1 2 3 4 5 6 7 | var msInDay = 86400000; var daysToAdd = 5; var now = new Date(); var milliseconds = now.getTime(); var newMillisecods = milliseconds + msInDay * daysToAdd; var newDate = new Date(newMillisecods); //or now.setTime(newMillisecods); |
日期具有接受int的构造函数。此参数表示1970年1月1日之前/之后的总毫秒数。它还有一个方法settime,可以在不创建新日期对象的情况下实现相同的功能。
我们在这里所做的是将天转换为毫秒,并将此值添加到gettime提供的值中。最后,我们给出结果到日期(毫秒)构造函数或settime(毫秒)方法。
无变量的通用原型,适用于现有日期值:
1 2 3 | Date.prototype.addDays = function (days) { return new Date(this.valueOf() + days * 864e5); } |
有一个setDate和一个getDate方法,允许您执行如下操作:
1 | var newDate = aDate.setDate(aDate.getDate() + numberOfDays); |
如果要同时减去天数并将日期格式化为人类可读的格式,则应考虑创建一个自定义
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | var DateHelper = { addDays : function(aDate, numberOfDays) { aDate.setDate(aDate.getDate() + numberOfDays); // Add numberOfDays return aDate; // Return the date }, format : function format(date) { return [ ("0" + date.getDate()).slice(-2), // Get day and pad it with zeroes ("0" + (date.getMonth()+1)).slice(-2), // Get month and pad it with zeroes date.getFullYear() // Get full year ].join('/'); // Glue the pieces together } } // With this helper, you can now just use one line of readable code to : // --------------------------------------------------------------------- // 1. Get the current date // 2. Add 20 days // 3. Format it // 4. Output it // --------------------------------------------------------------------- document.body.innerHTML = DateHelper.format(DateHelper.addDays(new Date(), 20)); |
(另见此小提琴)
我们的团队认为日期是这个领域最好的图书馆。它将日期视为不可变(moment.js可能永远不会采用不可变),速度更快,可以模块化加载。
1 | const newDate = DateFns.addDays(oldDate, 2); |
您可以使用javascript,不需要jquery:
1 2 3 4 5 6 7 8 9 10 | var someDate = new Date(); var numberOfDaysToAdd = 6; someDate.setDate(someDate.getDate() + numberOfDaysToAdd); Formatting to dd/mm/yyyy : var dd = someDate.getDate(); var mm = someDate.getMonth() + 1; var y = someDate.getFullYear(); var someFormattedDate = dd + '/'+ mm + '/'+ y; |
1 2 3 4 5 | //the_day is 2013-12-31 var the_day = Date.UTC(2013, 11, 31); // Now, the_day will be"1388448000000" in UTC+8; var the_next_day = new Date(the_day + 24 * 60 * 60 * 1000); // Now, the_next_day will be"Wed Jan 01 2014 08:00:00 GMT+0800" |
对于使用角度的:
只做:
1 2 | $scope.booking.totTijd.setMinutes($scope.booking.totTijd.getMinutes()+15); $scope.booking.totTijd.setDate($scope.booking.totTijd.getDate() + 1); |
试试这个
1 2 3 4 | function addDays(date,days) { var one_day=1000*60*60*24; return new Date(date.getTime()+(days*one_day)).toLocaleDateString(); } |
1 2 3 4 5 6 7 8 9 10 11 12 | function addDays(n){ var t = new Date(); t.setDate(t.getDate() + n); var month ="0"+(t.getMonth()+1); var date ="0"+t.getDate(); month = month.slice(-2); date = date.slice(-2); var date = date +"/"+month +"/"+t.getFullYear(); alert(date); } addDays(5); |
我用这种方法在一行中得到了正确的日期,得到了时间加上一天之后人们所说的话。
1 | ((new Date()).setDate((new Date()).getDate()+1)) |
我只是想我会建立一个正常的
1 2 | (new Date()).getDate() > 21 |
使用上面的代码,我现在可以在
1 2 | (new Date(((new Date()).setDate((new Date()).getDate()+1)))).getDate() > 22 |
或获取
1 | (new Date(((new Date()).setDate((new Date()).getDate()+1)))) |
我真不敢相信这条线5年后就没有剪贴液了!所以:不管夏天有什么干扰,都能得到一天中相同的时间:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Date.prototype.addDays = function(days) { var dat = new Date( this.valueOf() ) var hour1 = dat.getHours() dat.setTime( dat.getTime() + days * 86400000) // 24*60*60*1000 = 24 hours var hour2 = dat.getHours() if (hour1 != hour2) // summertime occured +/- a WHOLE number of hours thank god! dat.setTime( dat.getTime() + (hour1 - hour2) * 3600000) // 60*60*1000 = 1 hour return dat or this.setTime( dat.getTime() ) // to modify the object directly } |
那里。完成!
您可以在此处创建自定义助手函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | function plusToDate(currentDate, unit, howMuch) { var config = { second: 1000, // 1000 miliseconds minute: 60000, hour: 3600000, day: 86400000, week: 604800000, month: 2592000000, // Assuming 30 days in a month year: 31536000000 // Assuming 365 days in year }; var now = new Date(currentDate); return new Date(now + config[unit] * howMuch); } var today = new Date(); var theDayAfterTommorow = plusToDate(today, 'day', 2); |
顺便说一句,这是一个通用的解决方案,可以根据您的需要添加秒、分钟或天。
最简单的方法是使用日期FNS库。
1 2 | var addDays = require('date-fns/add_days') addDays(date, amount) |
文档可在此链接中找到。您也可以使用moment.js来完成这项工作。参考链接在这里
希望它有帮助!
最小2.39kb。一个文件。网址:https://github.com/rhroyston/clock-js
1 2 3 | console.log(clock.what.weekday(clock.now + clock.unit.days)); //"wednesday" console.log(clock.what.weekday(clock.now + (clock.unit.days * 2))); //"thursday" console.log(clock.what.weekday(clock.now + (clock.unit.days * 3))); //"friday" |
1 | <script src="https://raw.githubusercontent.com/rhroyston/clock-js/master/clock.min.js"> |
JSJoda是一个非常棒的Javascript不可变的日期和时间库。它是java-8datetime(jsr-310)的一个端口,它是著名的joda时间库的继承者。这是它的摘要。
今天增加17天
1 | LocalDate.now().plusDays(17); |
您还可以从现在开始一次构建多个操作的所需日期。
1 2 3 4 | LocalDate.now() .plusMonths(1) .withDayOfMonth(1) .minusDays(17); |
或:
1 2 | var d = LocalDate.parse('2019-02-23'); d.minus(Period.ofMonths(3).plusDays(3)); // '2018-11-20' |
我计算小时和天…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | Date.prototype.addDays = function(days){ days = parseInt(days, 10) this.setDate(this.getUTCDate() + days); return this; } Date.prototype.addHours = function(hrs){ var hr = this.getUTCHours() + parseInt(hrs , 10); while(hr > 24){ hr = hr - 24; this.addDays(1); } this.setHours(hr); return this; } |
同样的答案:如何增加今天日期的天数?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | function DaysOfMonth(nYear, nMonth) { switch (nMonth) { case 0: // January return 31; break; case 1: // February if ((nYear % 4) == 0) { return 29; } else { return 28; }; break; case 2: // March return 31; break; case 3: // April return 30; break; case 4: // May return 31; break; case 5: // June return 30; break; case 6: // July return 31; break; case 7: // August return 31; break; case 8: // September return 30; break; case 9: // October return 31; break; case 10: // November return 30; break; case 11: // December return 31; break; } }; function SkipDate(dDate, skipDays) { var nYear = dDate.getFullYear(); var nMonth = dDate.getMonth(); var nDate = dDate.getDate(); var remainDays = skipDays; var dRunDate = dDate; while (remainDays > 0) { remainDays_month = DaysOfMonth(nYear, nMonth) - nDate; if (remainDays > remainDays_month) { remainDays = remainDays - remainDays_month - 1; nDate = 1; if (nMonth < 11) { nMonth = nMonth + 1; } else { nMonth = 0; nYear = nYear + 1; }; } else { nDate = nDate + remainDays; remainDays = 0; }; dRunDate = Date(nYear, nMonth, nDate); } return new Date(nYear, nMonth, nDate); }; |