Javascriptで一日の始まりと終わりを取得する方法は?


271

タイムスタンプ(GMT)で今日の開始(00:00:00)と終了(23:59:59)を取得する方法は?コンピューターは現地時間を使用します。

回答:


527
var start = new Date();
start.setHours(0,0,0,0);

var end = new Date();
end.setHours(23,59,59,999);

alert( start.toUTCString() + ':' + end.toUTCString() );

これらからUTC時間を取得する必要がある場合は、を使用できますUTC()


24
私はvar end = new Date(start.getTime());あなたが同じ時点を持っていることを確実にするために-あなたが開始と終了の初期化の間で日付を変更する場合に-それが起こる可能性があります-入るためのちょうど良い習慣
Martyn Davis

@MartynDavisは、すべてが正常な動作である場合、通常約0〜2ティックがその間に発生しますが、CPUのビジー度に依存するため、1ティックの精度が心配な場合はそれを行うのが理にかなっています。
Jason Sebring

14
setUTCHours代わりにsetHoursを使用して世界時を取得することもお勧めします
sidonaldson

2
状況は変わったかもしれませんが、私にとっては、前日のUTC開始と前日のUTC終了に設定されています。
デビッドJ

5
@sidonaldsonの非常に重要なコメントを読んでください。setHoursUTC時間ではなく現地時間を設定するため、使用は危険です。
マイケル

229

momentjsライブラリを使用すると、これは、瞬間の現在の日付オブジェクトのstartOf()およびendOf()メソッドを使用して、文字列'day'を引数として渡すことで実現できます。

ローカルGMT:

var start = moment().startOf('day'); // set to 12:00 am today
var end = moment().endOf('day'); // set to 23:59 pm today

UTCの場合:

var start = moment.utc().startOf('day'); 
var end = moment.utc().endOf('day'); 

22
momentjsは、JavaScriptの時間処理に関連するすべてのもののワンストップショップです。常にインポートする価値があります。
ダニエルF

8
そして.toDate()、最後に日付を取得するために使用する必要があります。 var end = moment().endOf('day').toDate();
YaTaras 2016年

5
次のよう.unix()に、秒単位のUNIXタイムスタンプを取得するために最後に追加します:)次のように:moment().startOf('day').unix()
Lukas Liesis

5
事前定義されたDateオブジェクトがある場合、モーメントjsはどういうわけか機能しません。たとえば、moment(new Date()).endOf("day");機能しませんが、moment().endOf("day");機能します。
B.ケマー2017

5
@KlasMellbourn指定したタイムゾーンの1日の始まりを取得するには、次を使用moment-timezoneして実行できますmoment().tz('America/Chicago').startOf('day').toDate()
Chad Johnson

8

luxon.jsライブラリーを使用して、 'day'をパラメーターとして渡すことにより、startOfメソッドとendOfメソッドを使用して同じことが実現できます。

var DateTime = luxon.DateTime;
DateTime.local().startOf('day').toUTC().toISO(); //2017-11-16T18:30:00.000Z
DateTime.local().endOf('day').toUTC().toISO(); //2017-11-17T18:29:59.999Z
DateTime.fromISO(new Date().toISOString()).startOf('day').toUTC().toISO(); //2017-11-16T18:30:00.000Z

現地時間のみが必要な場合は.toUTC()を削除します

あなたはなぜそうしないのかと尋ねるかもしれません moment.jsでは、答えはここにあります。



6

GMTのタイムスタンプだけに関心がある場合は、これを行うこともできます。これは、さまざまな間隔(時間:1000 * 60 * 60、12時間:1000 * 60 * 60 * 12など)に簡単に適合させることができます。

const interval = 1000 * 60 * 60 * 24; // 24 hours in milliseconds

let startOfDay = Math.floor(Date.now() / interval) * interval;
let endOfDay = startOfDay + interval - 1; // 23:59:59:9999

1
重要な警告:これは、UTCで時間を取得したい場合にのみ機能します。(これは質問が求めていたものです...しかし、Google検索からここに来て、これに気づかなかった人には警告する必要があると思います。)
Kip

4

FYI(Tvanfossonのマージバージョン)

関数を呼び出しているときに実際の日付=>日付を返します

export const today = {
  iso: {
    start: () => new Date(new Date().setHours(0, 0, 0, 0)).toISOString(),
    now: () => new Date().toISOString(),
    end: () => new Date(new Date().setHours(23, 59, 59, 999)).toISOString()
  },
  local: {
  start: () => new Date(new Date(new Date().setHours(0, 0, 0, 0)).toString().split('GMT')[0] + ' UTC').toISOString(),
  now: () => new Date(new Date().toString().split('GMT')[0] + ' UTC').toISOString(),
  end: () => new Date(new Date(new Date().setHours(23, 59, 59, 999)).toString().split('GMT')[0] + ' UTC').toISOString()
  }
}

// 使い方

today.local.now(); //"2018-09-07T01:48:48.000Z" BAKU +04:00
today.iso.now(); // "2018-09-06T21:49:00.304Z" * 

*地域に応じて現地時間を自動的に変換するJava8のインスタント時間タイプに適用されます(グローバルアプリを作成する場合)。


0

日付の操作には、date-fnsライブラリの使用を好みます。それは本当に素晴らしいモジュール式で一貫したツールです。この方法で一日の始まりと終わりを得ることができます:

var startOfDay = dateFns.startOfDay;
var endOfDay = dateFns.endOfDay;

console.log('start of day ==> ', startOfDay(new Date('2015-11-11')));
console.log('end of day ==> ', endOfDay(new Date('2015-11-11')));
<script src="https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.29.0/date_fns.min.js"></script>


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