如何添加日期?

如何使用JavaScript将天数添加到当前Date?JavaScript是否有像. NET的AddDay()这样的内置函数?

1929853 次浏览
var today = new Date();var tomorrow = new Date();tomorrow.setDate(today.getDate()+1);

要小心,因为这可能很棘手。当设置tomorrow时,它只能工作,因为它的当前值与today的年份和月份匹配。然而,设置为“32”这样的日期数字通常仍然可以很好地将其移动到下个月。

您可以创建一个:-

Date.prototype.addDays = function(days) {var date = new Date(this.valueOf());date.setDate(date.getDate() + days);return date;}
var date = new Date();
console.log(date.addDays(5));

这会在必要时自动递增月份。例如:

8/31+1日将成为9/1

直接使用setDate的问题在于它是一个修改器,最好避免这种事情。ECMA认为将Date视为可变类而不是不可变结构是合适的。

这些答案让我感到困惑,我更喜欢:

var ms = new Date().getTime() + 86400000;var tomorrow = new Date(ms);

getTime()给出了自1970年以来的毫秒数,86400000是一天中的毫秒数。因此,ms包含所需日期的毫秒。

使用毫秒构造函数给出所需的日期对象。

试试看

var someDate = new Date();var duration = 2; //In DayssomeDate.setTime(someDate.getTime() +  (duration * 24 * 60 * 60 * 1000));

使用setDate()添加日期不会解决您的问题,请尝试在2月添加一些天,如果您尝试添加新的日期,它不会产生您期望的结果。

感谢Jason的回答,如预期的那样工作,以下是您的代码和Anthony WJones的方便格式的混合:

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()。

答案相同:如何在今天的日期上添加天数?

    function DaysOfMonth(nYear, nMonth) {switch (nMonth) {case 0:     // Januaryreturn 31; break;case 1:     // Februaryif ((nYear % 4) == 0) {return 29;}else {return 28;};break;case 2:     // Marchreturn 31; break;case 3:     // Aprilreturn 30; break;case 4:     // Mayreturn 31; break;case 5:     // Junereturn 30; break;case 6:     // Julyreturn 31; break;case 7:     // Augustreturn 31; break;case 8:     // Septemberreturn 30; break;case 9:     // Octoberreturn 31; break;case 10:     // Novemberreturn 30; break;case 11:     // Decemberreturn 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);};

我的简单解决方案是:

nextday=new Date(oldDate.getFullYear(),oldDate.getMonth(),oldDate.getDate()+1);

此解决方案在夏令时方面没有问题。此外,可以为年、月、日等添加/订阅任何偏移量。

day=new Date(oldDate.getFullYear()-2,oldDate.getMonth()+22,oldDate.getDate()+61);

正确的代码。

只是花了很长时间试图弄清楚这一年的交易是什么,而不是在下面的主要例子之后添加。

如果你想简单地将n天添加到你的日期,你最好去:

myDate.set日期(myDate.get日期()+n);

或者是冗长的版本

var theDate = new Date(2013, 11, 15);var myNewDate = new Date(theDate);myNewDate.setDate(myNewDate.getDate() + 30);console.log(myNewDate);

这个今天/明天的东西令人困惑。通过将当前日期设置为您的新日期变量,您将弄乱年值。如果您从原始日期开始工作,您将不会。

我昨晚创建了这些扩展:
您可以传递正值或负值;

例子:

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;}elseyr += ((this.getMonth() + num - mo) / 12);
value.setMonth(mo);value.setYear(yr);return value;}

正确答案

function addDays(date, days) {var result = new Date(date);result.setDate(result.getDate() + days);return result;}

错误答案

此答案有时提供了正确的结果,但经常返回错误的年份和月份。此答案唯一有效的情况是您添加天数的日期恰好具有当前年份和月份。

// Don't do it this way!function addDaysWRONG(date, days) {var result = new Date();result.setDate(date.getDate() + days);return result;}

证明/示例

检查这个JsFiddle

// Correctfunction addDays(date, days) {var result = new Date(date);result.setDate(result.getDate() + days);return result;}
// Bad Year/Monthfunction addDaysWRONG(date, days) {var result = new Date();result.setDate(date.getDate() + days);return result;}
// Bad during DSTfunction addDaysDstFail(date, days) {var dayms = (days * 24 * 60 * 60 * 1000);return new Date(date.getTime() + dayms);}
// TESTfunction 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");});
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;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script><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>

我用这种方法在一行中得到正确的日期,以获得时间加上人们上面所说的一天。

((new Date()).setDate((new Date()).getDate()+1))

我只是想建立一个正常的(new Date())

(new Date()).getDate()> 21

使用上面的代码,我现在可以在(new Date())中的Date()中设置所有这些,并且它的行为正常。

(new Date(((new Date()).setDate((new Date()).getDate()+1)))).getDate()> 22

或者获取Date对象:

(new Date(((new Date()).setDate((new Date()).getDate()+1))))

如果可以,请使用moment.js。JavaScript没有很好的本机日期/时间方法。以下是Moment的语法示例:

var nextWeek = moment().add(7, 'days');alert(nextWeek);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment-with-locales.min.js"></script>

Reference: http://momentjs.com/docs/#/manipulating/add/

    //the_day is 2013-12-31var 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"

我使用类似的东西:

new Date(dateObject.getTime() + amountOfDays * 24 * 60 * 60 * 1000)

适用于日节省时间:

new Date(new Date(2014, 2, 29, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)

新年工作:

new Date(new Date(2014, 11, 31, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)

它可以被参数化:

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);}

我数小时数天…

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;}

我不敢相信在5年!之后这个线程中没有剪切粘贴解决方案
所以:无论夏季干扰如何,都要获得相同的一天时间:

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 hoursvar 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 datorthis.setTime( dat.getTime() ) // to modify the object directly}

那里。成交!

在聚会后期,如果你使用#0有一个名为Moment的优秀插件:

http://momentjs.com/

var myDateOfNowPlusThreeDays = moment().add(3, "days").toDate();

http://momentjs.com/docs/#/manipulating/

还有很多其他的好东西在里面!

编辑:由于aikeru的评论,删除了jQuery引用

我想我也会给出一个答案:
就个人而言,我喜欢尝试避免无偿的变量声明、方法调用和构造函数调用,因为它们在性能上都是昂贵的。(当然,在合理的范围内)
我本来想把这个作为@安东尼·琼斯给出的答案下的评论,但考虑得更好。

// 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是DST的结束。

var dt = new Date( 2014, 10, 1, 10, 30, 0 );console.log( dt );                  // Sat Nov 01 2014 10:30:00console.log( dt.addDays( 10 ) );    // Tue Nov 11 2014 09:30:00

如果你想保留夏令时的时间(所以10:30仍然是10:30)…

// 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;};

那么现在你有…

var dt = new Date( 2014, 10, 1, 10, 30, 0 );console.log( dt );                  // Sat Nov 01 2014 10:30:00console.log( dt.addDays( 10 ) );    // Tue Nov 11 2014 10:30:00

我知道,但有时我喜欢这样:

function addDays(days) {return new Date(Date.now() + 864e5 * days);}

我使用以下解决方案。

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);

Date有一个接受int的构造函数。此参数表示1970年1月1日之前/之后的总毫秒数。它还有一个方法setTime,它在不创建新Date对象的情况下执行相同的操作。

我们在这里做的是将天数转换为毫秒,并将此值添加到getTime提供的值中。最后,我们将结果提供给Date(毫秒)构造函数或setTime(毫秒)方法。

编辑:而不是setTime()(或setHours()),你可以这样做:

Date.prototype.addDays= function(d){this.setDate(this.getDate() + d);return this;};
var tomorrow = new Date().addDays(1);

旧:

而不是使用setTime(),你可以使用setHours()

Date.prototype.addDays= function(d){this.setHours(this.getHours() + d * 24);return this;};
var tomorrow = new Date().addDays(1);

的jsfiddle

对于那些使用Angular的人:

只要做到:

$scope.booking.totTijd.setMinutes($scope.booking.totTijd.getMinutes()+15);$scope.booking.totTijd.setDate($scope.booking.totTijd.getDate() + 1);
int days = 1;var newDate = new Date(Date.now() + days * 24*60*60*1000);

代码

var days = 2;var newDate = new Date(Date.now() + days * 24*60*60*1000);
document.write('Today: <em>');document.write(new Date());document.write('</em><br/> New: <strong>');document.write(newDate);

2.39KB缩小。一个文件。https://github.com/rhroyston/clock-js

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"
<script src="https://raw.githubusercontent.com/rhroyston/clock-js/master/clock.min.js"></script>

不,JavaScript没有内置函数,但是您可以使用简单的代码行

timeObject.setDate(timeObject.getDate() + countOfDays);

最简单的解决方案。

 Date.prototype.addDays = function(days) {this.setDate(this.getDate() + parseInt(days));return this;};
// and then call
var newDate = new Date().addDays(2); //+2 daysconsole.log(newDate);
// or
var newDate1 = new Date().addDays(-2); //-2 daysconsole.log(newDate1);

在java脚本中添加日期的非常简单的代码。

var d = new Date();d.setDate(d.getDate() + prompt('how many days you want to add write here'));alert(d);

我对提议的解决方案有日光节约时间的问题。

通过使用getUTCDate/setUTCDate,我解决了我的问题。

// 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;}

您可以在此处创建自定义助手函数

function plusToDate(currentDate, unit, howMuch) {
var config = {second: 1000, // 1000 milisecondsminute: 60000,hour: 3600000,day: 86400000,week: 604800000,month: 2592000000, // Assuming 30 days in a monthyear: 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);

顺便说一句,这是一个通用的解决方案,用于添加秒或分钟或天,无论你想要什么。

我们的团队认为date-fns是这个领域最好的库。它将日期视为不可变Moment.js可能永远不会采用不变性),速度更快,并且可以模块化加载。

const newDate = DateFns.addDays(oldDate, 2);
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);

试试这个

function addDays(date,days) {var one_day=1000*60*60*24;return new Date(date.getTime()+(days*one_day)).toLocaleDateString();}

有一个设置日期和一个获取日期方法,它允许你做这样的事情:

var newDate = aDate.setDate(aDate.getDate() + numberOfDays);

如果你想减去天数并以人类可读的格式格式化你的日期,你应该考虑创建一个看起来像这样的自定义DateHelper对象:

var DateHelper = {addDays : function(aDate, numberOfDays) {aDate.setDate(aDate.getDate() + numberOfDays); // Add numberOfDaysreturn 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 zeroesdate.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));

(另见这个小提琴

最简单的方法是使用date-fns库。

var addDays = require('date-fns/add_days')addDays(date, amount)

留档可在此链接这里中使用。您也可以使用moment.js完成此操作。参考链接是这里

希望有帮助!

您可以使用JavaScript,无需jQuery:

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;

没有变量的通用原型,它适用于现有的Date值:

Date.prototype.addDays = function (days) {return new Date(this.valueOf() + days * 864e5);}

不使用第二个变量,您可以将7替换为下一个x天:

let d=new Date(new Date().getTime() + (7 * 24 * 60 * 60 * 1000));

减去30天使用(24h=86400000ms)

new Date(+yourDate - 30 *86400000)

var yourDate=new Date();var d = new Date(+yourDate - 30 *86400000)
console.log(d)

使用js-joda。它是javascript的一个很棒的不可变日期和时间库。这是它的备忘单的摘录。

17天到今天

LocalDate.now().plusDays(17);

您还可以从现在开始一次构建多个操作所需的日期。

LocalDate.now().plusMonths(1).withDayOfMonth(1).minusDays(17);

或:

var d = LocalDate.parse('2019-02-23');d.minus(Period.ofMonths(3).plusDays(3)); // '2018-11-20'

就这么简单:

new Date((new Date()).getTime() + (60*60*24*1000));

扩展Date的一些实现https://gist.github.com/netstart/c92e09730f3675ba8fb33be48520a86d

/*** just import, like** import './../shared/utils/date.prototype.extendions.ts';*/declare global {interface Date {addDays(days: number, useThis?: boolean): Date;
addSeconds(seconds: number): Date;
addMinutes(minutes: number): Date;
addHours(hours: number): Date;
addMonths(months: number): Date;
isToday(): boolean;
clone(): Date;
isAnotherMonth(date: Date): boolean;
isWeekend(): boolean;
isSameDate(date: Date): boolean;
getStringDate(): string;}}
Date.prototype.addDays = function(days: number): Date {if (!days) {return this;}this.setDate(this.getDate() + days);return this;};
Date.prototype.addSeconds = function(seconds: number) {let value = this.valueOf();value += 1000 * seconds;return new Date(value);};
Date.prototype.addMinutes = function(minutes: number) {let value = this.valueOf();value += 60000 * minutes;return new Date(value);};
Date.prototype.addHours = function(hours: number) {let value = this.valueOf();value += 3600000 * hours;return new Date(value);};
Date.prototype.addMonths = function(months: number) {const value = new Date(this.valueOf());
let mo = this.getMonth();let yr = this.getYear();
mo = (mo + months) % 12;if (0 > mo) {yr += (this.getMonth() + months - mo - 12) / 12;mo += 12;} else {yr += ((this.getMonth() + months - mo) / 12);}
value.setMonth(mo);value.setFullYear(yr);return value;};
Date.prototype.isToday = function(): boolean {const today = new Date();return this.isSameDate(today);};
Date.prototype.clone = function(): Date {return new Date(+this);};
Date.prototype.isAnotherMonth = function(date: Date): boolean {return date && this.getMonth() !== date.getMonth();};
Date.prototype.isWeekend = function(): boolean {return this.getDay() === 0 || this.getDay() === 6;};
Date.prototype.isSameDate = function(date: Date): boolean {return date && this.getFullYear() === date.getFullYear() && this.getMonth() === date.getMonth() && this.getDate() === date.getDate();};
Date.prototype.getStringDate = function(): string {// Month names in Brazilian Portugueseconst monthNames = ['Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'];// Month names in English// let monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];const today = new Date();if (this.getMonth() === today.getMonth() && this.getDay() === today.getDay()) {return 'Hoje';// return "Today";} else if (this.getMonth() === today.getMonth() && this.getDay() === today.getDay() + 1) {return 'Amanhã';// return "Tomorrow";} else if (this.getMonth() === today.getMonth() && this.getDay() === today.getDay() - 1) {return 'Ontem';// return "Yesterday";} else {return this.getDay() + ' de ' + this.monthNames[this.getMonth()] + ' de ' + this.getFullYear();// return this.monthNames[this.getMonth()] + ' ' + this.getDay() + ', ' +  this.getFullYear();}};

export {};

在javascript可能不是个好主意中扩展原型,尤其是在专业代码库中。

你想做的是扩展原生Date类:

class MyCustomDate extends Date {
addDays(days) {const date = new MyCustomDate(this.valueOf());date.setDate(date.getDate() + days);return date;}  
}
const today = new MyCustomDate();
const nextWeek = today.addDays(7)
console.log(nextWeek)

这样,如果有一天Javascript实现了一个原生的addDays方法,你就不会破坏任何东西。

管道运营商设计的解决方案:

const addDays = days => date => {const result = new Date(date);
result.setDate(result.getDate() + days);
return result;};

用法:

// Without the pipeline operator...addDays(7)(new Date());
// And with the pipeline operator...new Date() |> addDays(7);

如果您需要更多功能,我建议查看date-fns库。

为什么这么复杂?

假设您将要添加的天数存储在名为days_to_add的变量中。

那么这个短的应该这样做:

calc_date = new Date(Date.now() +(days_to_add * 86400000));

使用Date.now(),您可以获得实际的unix时间戳为毫秒,然后添加您想要添加天数的毫秒数。一天是24h60分钟60*1000ms=86400000 ms或864E5。

我实现的最简单的方法是使用Date()本身。'

const days = 15;// Date.now() gives the epoch date value (in milliseconds) of current datenextDate = new Date( Date.now() + days * 24 * 60 * 60 * 1000)

'

我的测试示例可以在Date Object的同一个实例中做一个减号。

Date.prototype.reset = function(){let newDate = new Date(this.timeStamp)this.setFullYear        (newDate.getFullYear())this.setMonth           (newDate.getMonth())this.setDate            (newDate.getDate())this.setHours           (newDate.getHours())this.setMinutes     (newDate.getMinutes())this.setSeconds     (newDate.getSeconds())this.setMilliseconds    (newDate.getMilliseconds())}
Date.prototype.addDays = function(days){this.timeStamp = this[Symbol.toPrimitive]('number')let daysInMiliseconds = (days * (1000 * 60 * 60 * 24))this.timeStamp = this.timeStamp + daysInMilisecondsthis.reset()}
Date.prototype.minusDays = function(days){this.timeStamp = this[Symbol.toPrimitive]('number')let daysInMiliseconds = (days * (1000 * 60 * 60 * 24))if(daysInMiliseconds <= this.timeStamp){this.timeStamp = this.timeStamp - daysInMilisecondsthis.reset()}       
}
var temp = new Date(Date.now())// from now time
console.log(temp.toDateString())temp.addDays(31)console.log(temp.toDateString())temp.minusDays(5)console.log(temp.toDateString())

以下是在Javascript中为特定日期添加天、月和年的方法。

// To add Daysvar d = new Date();d.setDate(d.getDate() + 5);
// To add Monthsvar m = new Date();m.setMonth(m.getMonth() + 5);
// To add Yearsvar y = new Date();y.setFullYear(y.getFullYear() + 5);

最简单的答案是,假设需要在当前日期上加1天:

var currentDate = new Date();var numberOfDayToAdd = 1;currentDate.setDate(currentDate.getDate() + numberOfDayToAdd );

逐行向您解释这段代码的作用:

  1. 创建当前日期变量,命名为当前日期。默认情况下,“new Date()”会自动将当前日期分配给变量。
  2. 创建一个变量将要添加的天数保存到日期(您可以跳过此变量并直接使用第三行中的值)
  3. 更改值 of Date(因为Date是保存在对象中的月份的天数),方法是给出相同的值+您想要的数字。切换到下一个月将是自动的

这种函数有问题,我用parseInt()解决

Date.prototype.addDays = function(dias) {
var date = new Date(this.valueOf());date.setDate(parseInt(date.getDate()) + parseInt(dias));return date;}
Date.prototype.addMonths = function(months) {var date = new Date(this.valueOf());date.setMonth(parseInt(date.getMonth()) + parseInt(months));return date;}

Date.prototype.addYears = function(years) {var date = new Date(this.valueOf());date.setFullYear(parseInt(date.getFullYear()) + parseInt(years));return date;}

对于那些不知道如何让它工作的人来说:有一个完整的工作代码,它并不完美,但你可以复制过去,它正在工作。

在InDesign中,在"Program Files\Adobe\Adobe InDesign 2021\Scripts\startup scripts"的启动脚本文件夹中创建.jsx

您可以在创意云中使用Ex的Script Toolkit CC制作并粘贴:

重新启动indesign和jjmmyyyy+30应该在texte变量中。这将显示像这样的日期jj/m/yyyy idk如何使它显示24/07/2021而不是24/7/2021,但对我来说足够好。

    #targetengine 'usernameVariable'function addVariables(openEvent){var doc = openEvent.parent;while ( doc.constructor.name != "Document" ){if ( doc.constructor.name == "Application" ){ return; }doc = doc.parent;}// from http://stackoverflow.com/questions/563406/add-days-to-datetime

var someDate = new Date();var numberOfDaysToAdd = 30;someDate.setDate(someDate.getDate() + numberOfDaysToAdd);

var dd = someDate.getDate();var mm = someDate.getMonth() + 1;var y = someDate.getFullYear();
var someFormattedDate = dd + '/'+ mm + '/'+ y;
createTextVariable(doc, "jjmmyyyy+30", someFormattedDate);}function createTextVariable(target, variableName, variableContents){var usernameVariable = target.textVariables.itemByName(variableName);if (!usernameVariable.isValid){usernameVariable = target.textVariables.add();usernameVariable.variableType = VariableTypes.CUSTOM_TEXT_TYPE;usernameVariable.name = variableName;}usernameVariable.variableOptions.contents = variableContents;}app.addEventListener('afterOpen', addVariables);

我试图解决类似的问题,我更喜欢getTime方法,但有一些奇怪的基于时区的副作用。

ofc将“今天”替换为您需要的任何日期并通过时间。关键是获取UTC时间,然后使用毫秒进行加法以绕过这些副作用。

var now = new Date(Date.now());var today = new Date(Date.UTC(now.getFullYear(), now.getMonth(), now.getDate()));
const dayInMs = 86400000; //24 hoursconst tomorrow = new Date(today.getTime() + dayInMs);

短:

function addDays(date, number) {const newDate = new Date(date);return new Date(newDate.setDate(newDate.getDate() + number));}
console.log({tomorrow: addDays(new Date(), 1)});

预付款:

function addDays(date, number) {const newDate = new Date(date);return new Date(newDate.setDate(date.getDate() + number));}
function addMonths(date, number) {const newDate = new Date(date);return new Date(newDate.setMonth(newDate.getMonth() + number));}
function addYears(date, number) {const newDate = new Date(date);return new Date(newDate.setFullYear(newDate.getFullYear() + number));}
function getNewDate(dateTime) {let date = new Date();let number = parseInt(dateTime.match(/\d+/)[0]);
if (dateTime.indexOf('-') != -1)number = (-number);
if (dateTime.indexOf('day') != -1)date = addDays(date, number);else if (dateTime.indexOf('month') != -1)date = addMonths(date, number);else if (dateTime.indexOf('year') != -1)date = addYears(date, number);
return date;}
console.log({tomorrow: getNewDate('+1day'),yesterday: getNewDate('-1day'),nextMonth: getNewDate('+1month'),nextYear: getNewDate('+1year'),});

修复由jperl提供

你可以试试:

var days = 50;
const d = new Date();
d.setDate(d.getDate() + days)

这应该工作得很好。

date d = new Date() // current date
date tomorrow = d.setMonth(d.getMonth(),d.getDate()+1) // return a date incremented by 0 months and 1 day
new Date(Date.now() + 2000 * 86400)

此代码段使用“2000”参数将两天添加到当前日期。您可以通过更新第二个参数中的“2000”值来调整天数。

您可以使用这种单行格式使用本机JavaScript日期向当前日期添加天数。