現在の日付に1日を追加するにはどうすればよいですか?


93

JavaScriptのDateオブジェクトを使用して1日インクリメントする必要がある現在のDateオブジェクトがあります。次のコードを配置しています。

var ds = stringFormat("{day} {date} {month} {year}", { 
                day: companyname.i18n.translate("day", language)[date.getUTCDay()], 
                date: date.getUTCDate(), 
                month: companyname.i18n.translate("month", language)[date.getUTCMonth()], 
                year: date.getUTCFullYear() 
});

どうすればそれに1日を追加できますか?

私はに+1を追加しましたgetUTCDay()し、getUTCDate()それがために「日曜日」と表示されませんday私が起こることを期待しています。


1
「+1を追加」とはどういう意味ですか?翌日か何か他のものが必要ですか?
Aleks G 2012

date: (date.getUTCDate()+1)(私のために作品を)動作しませんか?date(Date()-ObjectおよびObject-Keyとしての名前の競合がある可能性があります
。Date

現在、次のようにのみ表示されます:<option value = "2012-04-06"> 2012年4月6日土曜日</ option> <optionvalue = "2012-04-07"> 2012年4月7日</ option>、「日曜日」 2012年4月7日」
必死の

だからそれは7 Aprあなたが必要とするものではありません(私に「次の日を追加する」とは何ですか)、それはSundayです。と(または、現在の回答で言及されているように、前に)の+1両方を追加することを忘れないでください。day:date:
ドミニクシュライバー2012

回答:


236

日付オブジェクトに1日を追加するには:

var date = new Date();

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

重複する質問を参照してください:stackoverflow.com/questions/3674539/…。この回答は適切ですが、DSTは考慮されていません。24時間のない年の2日があります。
ジェス2014年

2
@ Jess-DSTの変更をどのように表現するかによって異なります。質問は日付に1を追加する方法を尋ねました、それはまさに上記の答えがすることです。24時間追加しても、必ずしもその日付が増加するわけではありません。setDateを使用してローカル日付に1時間を追加すると、常に増加します。
RobG 2014年

これが私の言いたいことです。3月10日をインクリメント: var a = new Date("2013-03-10T00:00:00.000Z"); a.setDate(a.getDate() + 1); a.toISOString();です"2013-03-10T23:00:00.000Z"。これは、上記の機能が機能しなかった微妙なケースです。
ジェス

1
もちろん違います!UTC時刻から始めて、基本的にそれをローカルに変換し、日を追加してから、UTCに戻します。そのため、現地の日付に1日が追加されましたが、UTC時間は23時間のみです。UTC日付に1を追加すると、現地時間の01:00:00に戻ります。この動作は夏時間に固有のものではなく、3つの異なるタイムゾーンを使用した結果です。
RobG 2014年

8
あは。getDateがUTCから現地時間に変換されていることに気づきませんでした。 a.setUTCDate(a.getUTCDate() + 1);<-ズールーの日付で機能します。
ジェス2014年

40

私の謙虚な意見では、コードをどのように因数分解するかに応じて、1日をミリ秒単位で追加するのが最善の方法です。

たとえば、2月28日または3月31日。

これが私がそれをする方法の例です:

var current = new Date(); //'Mar 11 2015' current.getTime() = 1426060964567
var followingDay = new Date(current.getTime() + 86400000); // + 1 day in ms
followingDay.toLocaleDateString();

imoこれは正確さを保証します

ここに別の例があります私はそれがあなたのために働くことができるのが好きではありませんが、上記の用量ほどきれいではありません

var today = new Date('12/31/2015');
var tomorrow = new Date(today);
tomorrow.setDate(today.getDate()+1);
tomorrow.toLocaleDateString();

imho this === 'POOP'

ですから、夏時間のために私のミリ秒アプローチに不満を持っている人もいます。だから私はこれを打ち負かすつもりです。まず、一部の国や州では夏時間がありません。2番目正確に24時間を追加するのは丸一日です。日付番号が年に1回変更されないが、6か月後に修正された場合、問題は発生しません。しかし、明確であり、邪悪なDate()の割り当てに対処しなければならないという目的のために、私はこれを熟考し、今では完全にDateを嫌っています。これが私の新しいアプローチです

var dd = new Date(); // or any date and time you care about 
var dateArray =  dd.toISOString().split('T')[0].split('-').concat( dd.toISOString().split('T')[1].split(':') );
// ["2016", "07", "04", "00", "17", "58.849Z"] at Z 

さあ、楽しい部分です!

var date = { 
    day: dateArray[2],
    month: dateArray[1],
    year: dateArray[0],
    hour: dateArray[3],
    minutes: dateArray[4],
    seconds:dateArray[5].split('.')[0],
    milliseconds: dateArray[5].split('.')[1].replace('Z','')
}

これで、公式の有効な国際日付変更線がズールー子午線で明確に書き出されました。日付を変更します

  dd.setDate(dd.getDate()+1); // this gives you one full calendar date forward
  tomorrow.setDate(dd.getTime() + 86400000);// this gives your 24 hours into the future. do what you want with it.

秒/ミリ秒を追加しても、夏時間には機能しません。
マットH

@MattHどこからそのアイデアを得ましたか。時間は、1970/01/01からミリ秒単位のUTCで設定されます
ロシアのピーター

1
はい、UTC時間の翌日ですが、必ずしも現地時間である必要はありません。米国の春先の日は、1日25時間です。したがって、たとえば3:00時間に3/31/15があり、スプリントフォワード日に86400000ミリ秒を追加すると、その日の25時間なので、現地時間は23:00時間に3/31/15になります。
マットH

3
:あなたはこのような効果見ることができますvar dte = Date.parse('2015-11-01'); console.log(dte); dte.setTime(dte.getTime() + 86400000 ); console.log(dte);
マット・H

1
これは過剰に設計されています。このような問題が発生した場合は、モーメントなどのライブラリを使用して、作業を簡単にしてください。
Joshua MichaelWagoner18年


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


夏時間を採用している場所では、すべての日が24時間であるとは限らないため、1日のミリ秒の追加は失敗します。たとえば、チリは2017年5月14日の真夜中に夏時間を終了します。時計は真夜中から23:00に巻き戻されます。したがって、2017-05-13 00:00:00に24時間を追加すると、2017-05-13 23:00:00が生成され、日付は変更されません(一部のブラウザーは正確に真夜中に実行し、他のブラウザーは1ミリ秒後に実行します) 。:-(
RobG 2017

2

この質問のjpmottinに触発されて、ここに1行のコードがあります:

var dateStr = '2019-01-01';
var days = 1;

var result = new Date(new Date(dateStr).setDate(new Date(dateStr).getDate() + days));

document.write('Date: ', result); // Wed Jan 02 2019 09:00:00 GMT+0900 (Japan Standard Time)
document.write('<br />');
document.write('Trimmed Date: ', result.toISOString().substr(0, 10)); // 2019-01-02

お役に立てれば


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.