web-dev-qa-db-ja.com

JavaScriptの日付に日数を追加する

JavaScriptを使用して現在のDateに日数を追加する方法。 JavaScriptには.NETのAddDayのような組み込み関数がありますか?

816
Ashesh

あなたが作成することができます: -

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を不変な構造ではなく可変クラスとして扱うのに適していると考えました。

942
AnthonyWJones

正解

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をチェックする

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

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

これはトリッキーになることがあるので注意してください。 "明日"を設定するとき、それはそれが現在の値が "今日"の年と月と一致するためにのみ機能します。ただし、「32」のような日付番号に設定しても、通常は翌月に移動するのに問題ありません。

154
Joel Coehoorn

私の簡単な解決策は、

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

このソリューションは夏時間の問題がありません。また、年、月、日などの任意のオフセットを追加/下位に追加できます。

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

正しいコードです。

77
sbrbot

これらの答えは私を混乱させているようです、私は好きです:

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

getTime()は1970年以降のミリ秒を示し、86400000は1日のミリ秒数です。 したがって、msには希望の日付のミリ秒が含まれます。 

ミリ秒コンストラクタを使用すると、目的の日付オブジェクトが得られます。

70
Jason

やってみる 

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

SetDate()を使用して日付を追加しても問題が解決しない場合は、2月に何日か追加してみてください。新しい日を追加しようとしても、期待した結果にはなりません。

41
sufyan.shoaib

以下の代表的な例に従うと、その年の取引が何であるかを考え出そうとして年齢を追加していません。

あなたが単に持っている日付にn日を追加したいだけなら、あなたはただ行くことが最善です:

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

または長いバージョン

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

今日/明日のことは混乱しています。現在の日付を新しい日付変数に設定することで、年の値をめちゃくちゃにします。あなたが元の日付から仕事をしているなら、あなたはしません。

31
Rumpleteaser

可能であれば、 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/

21
user2910265

私は昨夜これらの拡張機能を作成しました:
正または負の値を渡すことができます。

例:

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;
}
18
mark.nino.chua
int days = 1;
var newDate = new Date(Date.now() + days * 24*60*60*1000);

CodePen

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

16
Serge

最も簡単な解決策.

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

11
ampachts

パーティーに遅れて jQueryを使うのであれば Momentという優れたプラグインがあります。

http://momentjs.com/ /

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

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

そしてそこには他にもたくさんの良いものがあります!

編集:aikeruさんのコメントでjQueryの参照を削除しました

8
RemarkLima

予想通りに動作するあなたの答えをJasonに感謝します、ここにあなたのコードとAnthonyWJonesの便利なフォーマットからのミックスがあります:

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

古い私は知っていますが、時々私はこれが好きです:

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

いいえ、javascriptには組み込み関数はありませんが、単純なコード行を使用できます

timeObject.setDate(timeObject.getDate() + countOfDays);
6
Vahag Chakhoyan

SetDate()に関するMozillaのドキュメントでは、月末のシナリオを処理することは示されていません。 https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/)を参照してください。日付

setDate()

  • 現地時間に従って、指定された日の月の日(1から31)を設定します。

それで、私は日を追加する必要があるときにsetTime()を使用します。

6
Blake Mills

私も答えを出すつもりです。
個人的には、無駄な変数の宣言、メソッドの呼び出し、およびコンストラクターの呼び出しは、パフォーマンスが低下するため、避けるようにしてください。 (当然のことながら)
私はこれを@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を尊重します。 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
6
Duncan

提案されたソリューションでは、夏時間の問題がありました。

代わりに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;
}
6
Joshua Comeau

私はのようなものを使います:

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

2番目の変数を使用せずに、7を次のx日に置き換えることができます。

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

私は次の解決策を使っています。

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日の前後のミリ秒数の合計を表します。また、新しいDateオブジェクトを作成せずに同じことを行うメソッドsetTimeもあります。

ここで行うことは、日数をミリ秒に変換し、この値をgetTimeによって提供される値に追加することです。最後に、結果をDate(milliseconds)コンストラクターまたはsetTime(milliseconds)メソッドに渡します。

4
Vakhtang

編集: 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を参照してください ...

4
spaark

Javascriptに日付を追加するための非常に単純なコード。

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

4
Rana Aalamgeer

私たちのチームは date-fns この分野で最高の図書館を考えています。日付を immutable Moment.jsはおそらく不変性を採用しない )として日付を扱います。

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

setDate getDate メソッドがあります。

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

this Fiddle も参照)

3
John Slegers

これを試して

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

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;
2
Rohit.007
    //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"
2
cs1707

Angularを使っている人のために:

ただしてください:

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

ここであなたのカスタムヘルパー関数を作成することができます

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

ちなみに、これは秒、分、日を追加するための一般的な方法です。

1
Jitesh Tukadiya

変数を持たない汎用プロトタイプ。既存のDate値に適用されます。

Date.prototype.addDays = function (days) {
    return new Date(this.valueOf() + days * 864e5);
}
1
Matteo Conta
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
user123456789

私はこのアプローチを使用して、正しい日付を1行にまとめて時間と1日後に人々が上で言っていたことを取得します。

((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))))
0
yolk

差し引く 30 days

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

console.log(d)
0

2.39KB縮小しました。 1ファイル 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>

0
Ron Royston

js-joda は、JavaScript用の素晴らしい不変の日時ライブラリです。これは、有名な Joda-Time ライブラリの後継であるJava-8 DateTime( JSR-310 )の移植版です。これは、そのチートシートからの抜粋です。 

今日に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'
0
makata

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'
0
makata

この新しいDate((new Date())。getTime()+(60 * 60 * 24 * 1000));

0
Dila Gurung

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
    }

そこ。完了しました。

0
T4NK3R

これを実現する最も簡単な方法は、 date-fns libraryを使用することです。

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

ドキュメントはこのリンクにあります ここ moment.js を使ってこれを行うこともできます。参照リンクは ここ です。

それが役に立てば幸い!

0
Tuan