将日期添加到JavaScript日期

时间:2009-02-18 23:57:21

标签: javascript date datetime time

如何使用JavaScript将天数添加到当前Date。 JavaScript是否具有内置函数,如.Net的AddDay

52 个答案:

答案 0 :(得分:984)

您可以创建一个: -

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

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

答案 1 :(得分:644)

正确答案

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

证明/示例

Check this JsFiddle

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

答案 2 :(得分:163)

var today = new Date();
var tomorrow = new Date();
tomorrow.setDate(today.getDate()+1);

要小心,因为这可能很棘手。设置“明天”时,它只能起作用,因为它的当前值与“今天”的年份和月份相匹配。但是,设置为“32”之类的日期数字通常仍然可以正常运行到下个月。

答案 3 :(得分:89)

我的简单解决方案是:

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

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

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

是正确的代码。

答案 4 :(得分:74)

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

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

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

使用毫秒构造函数可以得到所需的日期对象。

答案 5 :(得分:43)

尝试

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

使用setDate()添加日期不会解决您的问题,请尝试将某些日期添加到2月份,如果您尝试向其添加新日期,则不会产生您期望的结果。

答案 6 :(得分:32)

花了很多年的时间试图弄清楚这笔年度的交易是什么,而不是在遵循下面的主要示例时添加。

如果你只想在你拥有的日期添加n天,那么你最好去:

  

myDate.setDate(myDate.getDate()+ n);

或longwinded版本

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

这个今天/明天的事情令人困惑。通过将当前日期设置为新的日期变量,您将弄乱年份值。如果你从原来的日期工作,你就不会。

答案 7 :(得分:21)

如果可以,请使用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>

参考:http://momentjs.com/docs/#/manipulating/add/

答案 8 :(得分:18)

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

示例:

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

答案 9 :(得分:17)

pipeline operator设计的解决方案:

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库。

答案 10 :(得分:16)

这是用于在Javascript中为特定日期添加天,月和年的方法。

// To add Days
var d = new Date();
d.setDate(d.getDate() + 5);

// To add Months
var m = new Date();
m.setMonth(m.getMonth() + 5);

// To add Years
var m = new Date();
m.setFullYear(m.getFullYear() + 5);

答案 11 :(得分:16)

int days = 1;
var newDate = new Date(Date.now() + days * 24*60*60*1000);

CodePen

&#13;
&#13;
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);
&#13;
&#13;
&#13;

答案 12 :(得分:13)

最简单的解决方案。

&#13;
&#13;
 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);
&#13;
&#13;
&#13;

答案 13 :(得分:8)

派对晚了,但是如果你使用jQuery那么就会有一个很棒的插件叫做Moment:

http://momentjs.com/

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

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

还有很多其他好东西!

编辑:感谢aikeru的评论

删除了jQuery引用

答案 14 :(得分:7)

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

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

答案 15 :(得分:7)

感谢Jason的回答符合预期,这里是您的代码和AnthonyWJones的便捷格式的混合:

Date.prototype.addDays = function(days){
    var ms = new Date().getTime() + (86400000 * days);
    var added = new Date(ms);
    return added;
}

答案 16 :(得分:6)

无需使用第二个变量,您就可以在接下来的x天中替换7:

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

答案 17 :(得分:6)

我提出的解决方案在夏令时方面存在问题。

通过使用<title> <#assign titles = lom\:general.lom\:title.lom\:string> <#if titles?is_enumerable> <#list titles as title> <string language="${title.language}">${title.content}</string> </#list> <#else> <string language="${titles.language}">${titles.content}</string> </#if> </title> / java.lang.StackOverflowError at sun.reflect.misc.ReflectUtil.checkPackageAccess(ReflectUtil.java:188) at sun.reflect.misc.ReflectUtil.checkPackageAccess(ReflectUtil.java:164) at sun.reflect.generics.reflectiveObjects.TypeVariableImpl.getGenericDeclaration(TypeVariableImpl.java:164) at sun.reflect.generics.reflectiveObjects.TypeVariableImpl.equals(TypeVariableImpl.java:189) at com.sun.beans.TypeResolver.resolve(TypeResolver.java:190) at com.sun.beans.TypeResolver.resolve(TypeResolver.java:201) ,我解决了我的问题。

getUTCDate

答案 18 :(得分:6)

setDate()的mozilla文档并不表示它将处理月末场景。 见https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date

的setDate()

  • 根据当地时间设置指定日期的月中某天(1-31)。

这就是我需要添加天数时使用setTime()的原因。

答案 19 :(得分:6)

我想我也会回答:
就个人而言,我喜欢尝试避免无偿的变量声明,方法调用和构造函数调用,因为它们的性能都很昂贵。 (当然,在合理范围内)
我打算在@AnthonyWJones给出的答案下留下这个评论,但是想得更好。

// 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的天数,则显示的时间(小时)将更改以反映该情况 例如:
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:00
console.log( dt.addDays( 10 ) );    // Tue Nov 11 2014 09:30:00

如果您希望保留DST的时间(所以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:00
console.log( dt.addDays( 10 ) );    // Tue Nov 11 2014 10:30:00

答案 20 :(得分:6)

不,javascript没有内置功能,但是 你可以使用一行简单的代码

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

答案 21 :(得分:5)

我用的是:

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

答案 22 :(得分:5)

为什么这么复杂?

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

那么这个简短的应该做到:

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

使用Date.now(),您可以得到实际的unix时间戳(以毫秒为单位),然后加上要添加天数的毫秒数。 一天是24h 60min 60s * 1000ms = 86400000 ms或864E5。

答案 23 :(得分:5)

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

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

`

答案 24 :(得分:4)

修改 而不是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);

the JSFiddle ...

答案 25 :(得分:4)

我正在使用以下解决方案。

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(毫秒)方法。

答案 26 :(得分:4)

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

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

答案 27 :(得分:4)

就这么简单:

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

答案 28 :(得分:3)

在JavaScript this spec中扩展原型,尤其是在专业代码库中。

您想要做的是扩展本机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方法,则不会破坏任何内容。

答案 29 :(得分:3)

我们的团队认为date-fns是这个领域最好的图书馆。它将日期视为不可变Moment.js will probably never adopt immutability),速度更快,并且可以模块化加载。

const newDate = DateFns.addDays(oldDate, 2);

答案 30 :(得分:3)

https://datatables.net/setDate方法,允许您执行以下操作:

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

如果您想要以人类可读的格式减去天数并格式化日期,则应考虑创建一个类似于此的自定义DateHelper对象:

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

(另见getDate

答案 31 :(得分:3)

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

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

答案 32 :(得分:3)

您可以使用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;

答案 33 :(得分:2)

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

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

要逐行向您解释此代码的作用:

  1. 创建名为当前日期的当前日期变量。默认情况下,“ new Date()”自动将当前日期分配给该变量。
  2. 创建变量以将要添加的天数保存到日期(您可以跳过此变量,而直接在第三行中使用该值)
  3. 更改Date的值(因为Date是对象中保存的月几号),因此请提供相同的值+所需的数字。自动切换到下个月

答案 34 :(得分:2)

这种函数有问题,我用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;
}

答案 35 :(得分:2)

试试这个

{{1}}

答案 36 :(得分:2)

    //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"

答案 37 :(得分:2)

对于那些使用Angular的人:

只是做:

$scope.booking.totTijd.setMinutes($scope.booking.totTijd.getMinutes()+15);
$scope.booking.totTijd.setDate($scope.booking.totTijd.getDate() + 1);

答案 38 :(得分:1)

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

答案 39 :(得分:1)

您可以在此处创建自定义帮助程序功能

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

顺便说一句,这是一个通用的解决方案,可以随时添加几秒或几分钟或几天。

答案 40 :(得分:1)

我已经使用这种方法在一行中获得正确的约会,以便按照上述人们的说法获得时间加上一天。

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

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

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

使用上面的代码,我现在可以在Date()中的(new Date())内设置所有内容,但行为正常。

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

或获取Date对象:

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

答案 41 :(得分:1)

5年之后,我无法相信此线程中没有任何剪切解决方案!
SO:无论夏季干扰如何,都要获得相同的时间:

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
    }

有。完成!

答案 42 :(得分:0)

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

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

此链接here中提供了文档。您也可以使用 moment.js 完成此操作。参考链接为here

希望有帮助!

答案 43 :(得分:0)

js-joda是JavaScript的一个很棒的不可变日期和时间库。它是Java-8 DateTime(JSR-310)的端口,它是著名的Joda-Time库的后继版本。这是其备忘单的摘录。

今天增加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'

答案 44 :(得分:0)

减去 30 天的使用量

new Date(+yourDate - 30 *86400000)

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

console.log(d)

答案 45 :(得分:0)

使用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'

答案 46 :(得分:0)

一些扩展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 Portuguese
  const 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 {};

答案 47 :(得分:0)

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>

答案 48 :(得分:0)

我的测试示例可以在Date对象的同一实例中加减号。

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 + daysInMiliseconds
      this.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 - daysInMiliseconds
          this.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())

答案 49 :(得分:-1)

我总结了几小时和几天......

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

答案 50 :(得分:-1)

对于不知道如何使其工作的每个人:有一个完整的工作代码,它并不完美,但您可以复制它并且它正在工作。

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

您可以使用 Creative Cloud 中的 Extendscript 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);

答案 51 :(得分:-8)

相同的答案:How to add number of days to today's date?

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