JavaScriptで昨日の日付を計算する


277

JavaScriptで昨日を日付として計算するにはどうすればよいですか?

回答:


456
var date = new Date();

date ; //# => Fri Apr 01 2011 11:14:50 GMT+0200 (CEST)

date.setDate(date.getDate() - 1);

date ; //# => Thu Mar 31 2011 11:14:50 GMT+0200 (CEST)

12
いいね。一見するgetDateと、月の日(例:1-31)を返すため、これは失敗するように見えるかもしれませんが、実際にsetDate(0)は、日付を前月の最終日に設定します。これはすべてのブラウザで機能しますか?
Drew Noakes 2014年

1
「すべて」のブラウザを確認するが、私はテストしたすべてで働いていませんでしたcamo.githubusercontent.com/...
ジェームズKyburz

1
@Zargold意味がわからない。node --version v9.4.0 node const date = new Date()undefined> date.toISOString() '2018-02-10T16:26:30.821Z'> date.setDate(date.getDate()-1)1518193590821> date .toISOString() '2018-02-09T16:26:30.821Z'
James Kyburz

うーんはい、直接テストしましたが、あなたの言うとおりです。私のユースケースがどのように異なっていたのか、そして完全にリファクタリングしてきました。だから私は見ることができません。
Zargold 2018

91

あまり効率的ではありませんが、ワンライナーとして:

var yesterday = new Date(new Date().setDate(new Date().getDate()-1));

上記Dateは、不必要に無駄な3つのオブジェクトを作成します。これは、次のようにして単一のインスタンス化に減らすことができます。

var yesterday = (function(){this.setDate(this.getDate()-1); return this})
                  .call(new Date)

または、必要に応じて:

var yesterday = (function(d){ d.setDate(d.getDate()-1); return d})(new Date)

または、矢印機能付きのES6を使用する場合:

let yesterday = ( d => new Date(d.setDate(d.getDate()-1)) )(new Date);

6
私はスコープをいじっ避けるために好む:var yesterday = (function(d){ d.setDate(d.getDate()-1); return d})(new Date)
ロイティンカー

3
ワンライナーが必要な場合は、new Date(Date.now()-24 * 60 * 60 * 1000);のようなものを使用します。これには、Dateオブジェクトを1つだけ作成できるという利点があります。しかし正直なところ、このコードを保守している人は誰でも、関数をスローする何か(つまり、ミリ秒)よりも、明確な2行バージョンを見る方がはるかに幸せです。
Rob Whelan 2014

65

これを試して

var d = new Date();
d.setDate(d.getDate() - 1);

1
次のコマンドd.setHours(19,59); 時刻を午後7時59分に設定するには
James Jenkins

60

驚くほど簡単なクロスブラウザーソリューションに対する答えはありません

昨日とまったく同じ時間を見つけるには:

var yesterday = new Date(Date.now() - 86400000); // that is: 24 * 60 * 60 * 1000

つまり、依存関係を解放したい場合は、http://momentjs.comを使用することをお勧めします


7
夏時間が変更された場合、これはどのように機能しますか?それはそれを1時間遅れて/ 1時間遅れてバンプしませんか?
Adam Tegen

19

質問を一般化し、他の差分計算を行うには、次を使用します。

var yesterday = new Date((new Date()).valueOf() - 1000*60*60*24);

これは、「現在」の値に基づいて、1日を引いたミリ秒単位のUNIXエポックを表す整数として、新しい日付オブジェクトを作成します。

二日前:

var twoDaysAgo = new Date((new Date()).valueOf() - 1000*60*60*24*2);

1時間前:

var oneHourAgo = new Date((new Date()).valueOf() - 1000*60*60);

ミリ秒で表されるUNIXエポックで操作しているため、これが最も安全な方法のようです。したがって、算術演算はgetDate()-1などを実行するよりも安全です。私はgetDate()-1を試していませんが、getDate()のドキュメントに基づいて、今日の日付が任意の月の最初の日付である場合、1を返します。また、1-1 = 0は有効な日付ではありません。setDate(0)がどのように機能するかわかりません。
Kapil Pendse 2014年

1
これは私のアプローチでしたが、少し単純化することもできます-new Date(Date.now()-24 * 60 * 60 * 1000);のようなものを試してください。
Rob Whelan 2014

setDate(0)、btw、は問題ありません-前月の最終日に反転します。しかし、ここではミリ秒の表現を落とす方が整然とした(そしてより直感的な)ように思えます。1つの欠点は、「1日のミリ秒数」がそれほど明確ではないため、計算を打ち間違えやすいことです。
Rob Whelan 14

UNIX時間での作業は、より信頼できるオプションのようです。これはより高く評価されるべきです。
Paul

ええ、私はこのアプローチが一番好きです。あいまいさが少なくなります。と行きましたnew Date(Date.parse(new Date()) - 86400000)。Date.now()は好きなので、代わりに試してみるかもしれません。追加の日付が保存されます。
coblr 2015

9

瞬間を使うライブラリしています。非常に柔軟で使いやすいです。

あなたの場合:

let yesterday = moment().subtract(1, 'day').toDate();

2
subtract代わりに使用した方がよいadd
Thomas Ayoub

うまくいきます!FullCalendarと彼のvalidRangeのための素晴らしい仕事
XenoX



6

var today = new Date();
var yesterday1 = new Date(new Date().setDate(new Date().getDate() - 1));
var yesterday2 = new Date(Date.now() - 86400000);
var yesterday3 = new Date(Date.now() - 1000*60*60*24);
var yesterday4 = new Date((new Date()).valueOf() - 1000*60*60*24);
console.log("Today: "+today);
console.log("Yesterday: "+yesterday1);
console.log("Yesterday: "+yesterday2);
console.log("Yesterday: "+yesterday3);
console.log("Yesterday: "+yesterday4);


5

これにより、昨日の00:00に分精度で生成されます

var d = new Date();
d.setDate(d.getDate() - 1);
d.setTime(d.getTime()-d.getHours()*3600*1000-d.getMinutes()*60*1000);

2
d.setHours(0,0,0,0);

トリックを行います


1
でしょうか?これは時間、分、秒を0に設定するだけだと思いましたが、実際には日付を変更しませんか?
Jesper Bylund、2016

昨日は、負の数を使わなければなりませんでしたd.setHours(-1,0,0,0)。これは昨日の日付を返しますが、希望する時刻ではない可能性があります(23:00:00)
cs_pupil

1

これを試してみてください、私にとってはうまくいきます:

var today = new Date();
var yesterday = new Date(today.setDate(today.getDate() - 1)); `

これは私に昨日の日付オブジェクトを取り戻しました


1
あなたがtoday.setDateを使用しているので、todayは昨日にも変わります。昨日の変数を作成してから設定することをお勧めします。 var yesterday = new Date(); yesterday.setDate(today.GetDate() - 1)今日と昨日の両方を使用できます
PersyJack

1

これは、テキストでYYYY-MM-DD形式の昨日の日付を取得し、タイムゾーンオフセットを処理するために使用される1つのライナーです。

new Date(Date.now() - 1 * 86400000 - new Date().getTimezoneOffset() * 60000).toISOString().split('T')[0]

日付をx日前に戻すように変更することもできます。時間などを含める

console.log(Date())
console.log(new Date(Date.now() - 1 * 86400000 - new Date().getTimezoneOffset() * 60000).toISOString().split('T')[0]); // "2019-11-11"
console.log(new Date(Date.now() - 1 * 86400000 - new Date().getTimezoneOffset() * 60000).toISOString().split('.')[0].replace('T',' ')); // "2019-11-11 11:11:11"

// that is: [dates] * 24 * 60 * 60 * 1000 - offsetinmin * 60 * 1000    // this is: [dates] * 24 * 60 * 60 * 1000 - offsetinmin * 60 * 1000


0

昨日の日付を取得し、その日付を人間が読める形式にし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. Subtract 1 day
// 3. Format it
// 4. Output it
// ---------------------------------------------------------------------
document.body.innerHTML = DateHelper.format(DateHelper.addDays(new Date(), -1));

このフィドルも参照してください)


0

このライブラリを使用して多くのことを達成できると非常に役立ちます。

現在のタイミングで昨日の日付を取得する moment().subtract(1, 'days').toString()

日付の開始で昨日の日付を取得します moment().subtract(1, 'days').startOf('day').toString()


0

境界日付問題を解決する(2020、01、01)-> 2019、12、31

var now = new Date();
return new Date(now.getMonth() - 1 === 0 ? now.getFullYear() - 1 : now.getFullYear(),
                now.getDate() - 1 === 0 ? now.getMonth() - 1: now.getMonth(),
                now.getDate() - 1);

-1

「Date.now()-86400000」は、夏時間の終了日(その日は25時間)では機能しません

別のオプションはクロージャーを使用することです:

var d = new goog.date.Date();
d.add(new goog.date.Interval(0, 0, -1));
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.