向javascript日期添加天数

Add days to JavaScript Date

如何使用javascript向当前Date添加天数。javascript是否具有.NET的AddDay这样的内置函数?


您可以使用以下命令创建一个:

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。

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


正确答案:

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


派对迟到,但是如果你使用jQuery,那么有一个优秀的插件,叫做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

我对夏令时提出的解决方案有异议。

我用getUTCDate/setUTCDate代替,解决了我的问题。

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

编辑:您可以这样做,而不是使用setTime()setHours()

1
2
3
4
5
6
Date.prototype.addDays= function(d){
  this.setDate(this.getDate() + d);
  return this;
};

var tomorrow = new Date().addDays(1);

旧的:

不使用setTime(),您可以使用setHours()

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

如果要同时减去天数并将日期格式化为人类可读的格式,则应考虑创建一个自定义DateHelper对象,其外观如下:

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

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

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

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

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

或获取Date对象:

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