web-dev-qa-db-ja.com

JavaScriptで日付を増やす

JavaScriptでは日付の値を1日増やす必要があります。

たとえば、2010-09-11という日付値があり、翌日の日付をJavaScript変数に格納する必要があります。

日付を1日ずつ増やすにはどうすればよいですか。

340
Santanu

あなたのための3つの選択肢:

1. JavaScriptのDateオブジェクトのみを使用します(ライブラリなし)。

#1に対する私の前の答えは間違っていました(それは24時間を追加しました、夏時間との間の移行を説明するのに失敗しました; Clever Human 。代わりに、 Jigar's answer がライブラリなしでこれを行う正しい方法です。

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

JavaScriptのdateオブジェクトはロールオーバーについて賢いので、これは月の最後の日(または年)でも機能します。

var lastDayOf2015 = new Date(2015, 11, 31);
snippet.log("Last day of 2015: " + lastDayOf2015.toISOString());
var nextDay = new Date(+lastDayOf2015);
var dateValue = nextDay.getDate() + 1;
snippet.log("Setting the 'date' part to " + dateValue);
nextDay.setDate(dateValue);
snippet.log("Resulting date: " + nextDay.toISOString());
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="//tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

(この答えは現在受け入れられているので、削除することはできません。受け入れられる前に、OPに彼らはJigarを受け入れることを提案しましたが、おそらくリストの項目#2または#3についてこれを受け入れました。)

2. MomentJS を使う:

var today = moment();
var tomorrow = moment(today).add(1, 'days');

addは、新しいインスタンスを返すのではなく、それを呼び出すインスタンスを変更するので、today.add(1, 'days')todayを変更するので注意してください。そのため、var tomorrow = ...の複製操作から始めます。)

3. DateJS を使いますが、長い間更新されていません:

var today = new Date(); // Or Date.today()
var tomorrow = today.add(1).day();
639
T.J. Crowder
var myDate = new Date();

//add a day to the date
myDate.setDate(myDate.getDate() + 1);
151
Jigar Joshi

この回答の例はいずれも、夏時間調整日には使用できないようです。当時は、1日の時間数は24ではありません(あなたが「前進」しているのか「後退」しているのかに応じて、23または25です)

下記のAddDays JavaScript関数は夏時間を考慮しています。

function addDays(date, amount) {
  var tzOff = date.getTimezoneOffset() * 60 * 1000,
      t = date.getTime(),
      d = new Date(),
      tzOff2;

  t += (1000 * 60 * 60 * 24) * amount;
  d.setTime(t);

  tzOff2 = d.getTimezoneOffset() * 60 * 1000;
  if (tzOff != tzOff2) {
    var diff = tzOff2 - tzOff;
    t += diff;
    d.setTime(t);
  }

  return d;
}

これは私が機能をテストするために使用したテストです。

    var d = new Date(2010,10,7);
    var d2 = AddDays(d, 1);
    document.write(d.toString() + "<br />" + d2.toString());

    d = new Date(2010,10,8);
    d2 = AddDays(d, -1)
    document.write("<hr /><br />" +  d.toString() + "<br />" + d2.toString());

    d = new Date('Sun Mar 27 2011 01:59:00 GMT+0100 (CET)');
    d2 = AddDays(d, 1)
    document.write("<hr /><br />" +  d.toString() + "<br />" + d2.toString());

    d = new Date('Sun Mar 28 2011 01:59:00 GMT+0100 (CET)');
    d2 = AddDays(d, -1)
    document.write("<hr /><br />" +  d.toString() + "<br />" + d2.toString());
30
Clever Human

最も簡単な方法は、ミリ秒に変換して1000 * 60 * 60 * 24ミリ秒を追加することです。

var tomorrow = new Date(today.getTime()+1000*60*60*24);
22

純粋なJSでは一行で明日が、それは 醜い です!

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

これが結果です。

Thu Oct 12 2017 08:53:30 GMT+0200 (Romance Summer Time)
14
jpmottin

他の人の提案に従う前に、まず文字列を解析する必要があります。

var dateString = "2010-09-11";
var myDate = new Date(dateString);

//add a day to the date
myDate.setDate(myDate.getDate() + 1);

同じフォーマットに戻したい場合は、「手動」で行う必要があります。

var y = myDate.getFullYear(),
    m = myDate.getMonth() + 1, // january is month 0 in javascript
    d = myDate.getDate();
var pad = function(val) { var str = val.toString(); return (str.length < 2) ? "0" + str : str};
dateString = [y, pad(m), pad(d)].join("-");

しかし、他の回答で述べたようにDate.jsを取得することをお勧めします。これは alot に役立ちます。

11
einarmagnus

2つの方法

1:

var a = new Date()
// no_of_days is an integer value
var b = new Date(a.setTime(a.getTime() + no_of_days * 86400000)

2:前の方法と同じ

var a = new Date()
// no_of_days is an integer value
var b = new Date(a.setDate(a.getDate() + no_of_days)
2
Laksh Goel

次の5日間を入手:

var date = new Date(),
d = date.getDate(),
m = date.getMonth(),
y = date.getFullYear();


for(i=0; i < 5; i++){
var curdate = new Date(y, m, d+i)
console.log(curdate)
}
2
fitodac

DateObj.toJSON()メソッドを使用して日付の文字列値を取得します。参照: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toJSON Slice the戻り値から日付を取得して、必要な日数を加えます。

var currentdate = new Date();
currentdate.setDate(currentdate.getDate() + 1);
var tomorrow = currentdate.toJSON().slice(0,10);
1
phil
 Date.prototype.AddDays = function (days) {
    days = parseInt(days, 10);
    return new Date(this.valueOf() + 1000 * 60 * 60 * 24 * days);
}

var dt = new Date();
console.log(dt.AddDays(-30));
console.log(dt.AddDays(-10));
console.log(dt.AddDays(-1));
console.log(dt.AddDays(0));
console.log(dt.AddDays(1));
console.log(dt.AddDays(10));
console.log(dt.AddDays(30));

結果

2017-09-03T15:01:37.213Z
2017-09-23T15:01:37.213Z
2017-10-02T15:01:37.213Z
2017-10-03T15:01:37.213Z
2017-10-04T15:01:37.213Z
2017-10-13T15:01:37.213Z
2017-11-02T15:01:37.213Z
0
swirekx

Vanilla jsで日付を増やす

start_date_value = "01/01/2019"
var next_year = new Date(start_date_value);
next_year.setYear(next_year.getYear() + 1);
console.log(next_year.getYear()); //=> 2020

万が一誰かが日付以外の値を増やしたい場合

0
d1jhoni1b

const date = moment()。add(14、 "days")。toDate()//ここで、今日に14日を追加します

0
Kiran Debnath

それがバグ(テスト済みのFirefox 32.0.3およびChrome 38.0.2125.101)であるかどうかはまったくわかりませんが、ブラジルでは次のコードが失敗します(-3 GMT)。

Date.prototype.shiftDays = function(days){    
  days = parseInt(days, 10);
  this.setDate(this.getDate() + days);
  return this;
}

$date = new Date(2014, 9, 16,0,1,1);
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");

結果:

Fri Oct 17 2014 00:01:01 GMT-0300
Sat Oct 18 2014 00:01:01 GMT-0300
Sat Oct 18 2014 23:01:01 GMT-0300
Sun Oct 19 2014 23:01:01 GMT-0200

日付に1時間を追加すると、それは完全に機能します(ただし、問題は解決されません)。

$date = new Date(2014, 9, 16,0,1,1);

結果:

Fri Oct 17 2014 01:01:01 GMT-0300
Sat Oct 18 2014 01:01:01 GMT-0300
Sun Oct 19 2014 01:01:01 GMT-0200
Mon Oct 20 2014 01:01:01 GMT-0200
0
Alan Weiss

明日の日付の文字列表現になります。 new Date()を使用して今日の日付を取得し、Date.getDate()とDate.setDate()を使用して1日を追加し、Dateオブジェクトを文字列に変換します。

  const tomorrow = () => {
      let t = new Date();
      t.setDate(t.getDate() + 1);
      return `${t.getFullYear()}-${String(t.getMonth() + 1).padStart(2, '0')}-${String(
        t.getDate()
      ).padStart(2, '0')}`;
    };
    tomorrow();
0
Gor