JavaScriptで日付を増やす


回答:


791

あなたのための3つのオプション:

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

#1に対する私の以前の答えは間違っていました(24時間追加され、夏時間への移行と夏時間からの移行が考慮されませんでした。CleverHumanは、2010年11月7日の東部タイムゾーンでは失敗すると指摘しました)。代わりに、Jigarの答えは、ライブラリなしでこれを行う正しい方法です。

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

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

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

2. MomentJSの使用:

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

(つまり注意してくださいaddあなたがそうではなく、新しいインスタンスを返すよりも、上でそれを呼び出す修正にインスタンスをtoday.add(1, 'days')修正するでしょうtoday。私たちは上のクローニングOPで始まる理由のvar tomorrow = ...。)

3. DateJSを使用しているが、長い間更新されていない:

var today = new Date(); // Or Date.today()
var tomorrow = today.add(1).day();

しかし、document.getElementById( "arrival_date")。valueを使用して、変数に2010-09-11の日付があります。無効な日付が表示されます
Santanu

1
@santanu:それはまったく別の問題です:日付の解析(文字列を解釈して日付を取得する)。その形式が静的な場合は、自分で構文解析して、結果をDateコンストラクターに渡すことができます(new Date(year, month, date)); 仕様のセクション15.9.2.1を参照してください。さまざまな形式を受け入れる場合は、必ずDateJSをご覧ください
TJクラウダー2010

1
@santanu:上記のことを補足します:一部のブラウザでは、その形式を正常に解析できますDate.parse(これにより、ミリ秒数が返され、にフィードできますnew Date(ms))。ただし、これはブラウザごとに異なる可能性があることに注意してください。最近まで、実装は、彼らがやりたかったことのほぼすべてを行うことができましたDate.parse。新しい第5版の仕様には、受け入れられる必要のある最小限の形式が含まれていますが、まだそれは当てになりません。
TJクラウダー

Dateインスタンスに秒を追加したかっただけです。これは私にとってx = new Date(); x2 = new Date(x.getTime() + 1000)はうまくいきました。1000はミリ秒の増分です。
berto

1
@piavgh:最初のソリューションには何の問題もありません、それはあなたがそれをどのように使っているかだけです。Dateオブジェクトは変更可能です。同じ Dateオブジェクトを配列に3回格納しています。あなたは、3つの異なるしたい場合はDate、オブジェクトを、次の3つのオブジェクトを作成する必要がありますvar unavailableDates = []; for (var d = new Date('2017-05-11'); d < new Date('2017-05-13'); d.setDate(d.getDate() + 1)) { unavailableDates.push(new Date(+d)); }
TJクラウダー

178
var myDate = new Date();

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

しかし、document.getElementById( "arrival_date")。valueを使用して変数に2010-09-11の日付があり、無効な日付を示しています
Santanu

1
@sanatu:その場合、ブラウザが受け入れる方法で文字列をフォーマットする必要があります。Chromeは受け入れますnew Date("2009-09-11")が、Firefoxは受け入れません。私はほとんどのブラウザが受け入れると思いますnew Date("2009/09/11")ので、簡単な解決策はあるでしょうvar arrivalDate = document.getElementById('arival_date').value; var dayAfter = new Date(arrival_date.replace(/-/g, '/')); dayAfter.setDate(dayAfter.getDate()+1);
David Hedlund、

5
交換するよりも、より強固なアプローチ-/し、ブラウザがそれを受け入れることを期待して、部品に文字列を分割するようになります:var dateParts = arrivalDate.split('-'); var y = parseInt(dateParts[0], 10); var m = parseInt(dateParts[1], 10); var d = parseInt(dateParts[2], 10); var dayAfter = new Date(y, m-1, d+1);注我々が使用していることm-1のjavascriptヶ月がenum値(1月は0であること、ではない1)であるため、ここでは、とd+1私たちなぜなら'最初の割り当てで既にインクリメントを行っています(2月29日などは自動的に修正されます)
David Hedlund

35

この回答の例は、夏時間調整日では機能しないようです。これらの日では、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());

33

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

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

私はこれ、整数表現ルールが大好きです。
exebook

これが最良の答えです。リクエストした日数だけ簡単に増減できます。1000*60*60*24x を乗算するだけDaysToBeAdded
Khalil Khalaf 2017

または、new Date(+new Date() + 1000*60*60*24)ですが、実際にはgetTime()/ に似ていsetTime()ます。
Polv

1
日付がUTCまたは夏時間のない別のタイムゾーンでない限り、これを行わないでください。そうしないと、年間2日間、予期しない結果が生じます。
ItalyPaleAle

ワンライナー:new Date(Date.now()+1000*60*60*24);
aiyan

28

明日は純粋なJSの1行で表示されますが、醜いです。

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

結果は次のとおりです。

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

14

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

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を取得示唆たくさん


7

.getTime()and .setTime()ほど安全なものはないと感じたので、これが最高で、パフォーマンスも良いはずです。

const d = new Date()
console.log(d.setTime(d.getTime() + 1000 * 60 * 60 * 24)) // MILLISECONDS

.setDate() 無効な日付(31 + 1など)は危険すぎるため、ブラウザの実装によって異なります。


5

次の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)
}

上記の答えを試したが無駄だった。あなたのコードは魅力のように機能しました。ありがとう!
dimmat 2018

4

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

dateObj.toJSON()メソッドを使用して日付の文字列値を取得しますRef:https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toJSON 返された日付をスライスします値を入力し、必要な日数だけ増分します。

var currentdate = new Date();
currentdate.setDate(currentdate.getDate() + 1);
var tomorrow = currentdate.toJSON().slice(0,10);

Date.toJSONはUTCタイムゾーンの使用 stackoverflow.com/questions/11382606/...
AndreyP

2
 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

コードが機能しません。最初のconsole.log()で試してみましたが、dt.AddDays()は関数ではありません。
Adrian2895

1

BUG(テスト済みの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

1

明日の日付の文字列表現になります。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();

1

バニラ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

誰かが日付(日)以外の値を増やしたい場合に備えて


1

ネイティブJSを介して、1日を追加するには、次のようにします。

let date = new Date(); // today
date.setDate(date.getDate() + 1) // tomorrow

別のオプションは、momentライブラリを使用することです:

const date = moment().add(14, "days").toDate()

1
このコードが何をするか説明してください。OPの問題への対処方法の詳細を追加します。
Yash

1

JavaScript日付のタイムゾーン/夏時間対応の日付増分:

function nextDay(date) {
    const sign = v => (v < 0 ? -1 : +1);
    const result = new Date(date.getTime());
    result.setDate(result.getDate() + 1);
    const offset = result.getTimezoneOffset();
    return new Date(result.getTime() + sign(offset) * offset * 60 * 1000);
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.