どうしても「今日の0時」が欲しかった

More than 1 year has passed since last update.


JavaScriptで日時操作

任せてよ!Dateオブジェクトを作ればいいんだよね!

new Date() で生成してと。。。


でもね

そんなに単純じゃなかった。

var today0 = new Date();

console.log(today0); // Sun Apr 30 2017 22:25:54 GMT+0900 (東京 (標準時))

なんだ。バグか?

いや違う。これは単純に、実行している時刻

「22:25:54」が表示されているだけですね。


今日の0時を作ってみた

まずは不格好だけど、1行で頑張って書いてみると。

var today1 = new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate());

console.log(today1); // Sun Apr 30 2017 00:00:00 GMT+0900 (東京 (標準時))

うーん。ちょっとイケてないかもしれません。


見やすくしてみる

ソースコードは、見やすくてナンボ。

ということで、2行になってもいいので、変数を使用してみます。

var today2 = new Date();

today2 = new Date(today2.getFullYear(), today2.getMonth(), today2.getDate());
console.log(today2); // Sun Apr 30 2017 00:00:00 GMT+0900 (東京 (標準時))

少し良くなりましたね。

でも、もっと別の方法がないものか、ちょっと調べてみました。


toDateString

どうやらtoDateStringで「日付の部分を文字列で取得」できるようです。

文字列には「日付の部分しかなく、時刻の部分が入っていない」ので、勝手に0時になるという仕組みですね。

その文字列をコンストラクタに突っ込んだら、シンプルな1行になりました。

var today3 = new Date(new Date().toDateString());

console.log(today3); // Sun Apr 30 2017 00:00:00 GMT+0900 (東京 (標準時))

ぐっと良くなりましたね。

でも、もっと別の方法がないものか、さらに調べてみました。


setHours

どうやらsetHoursで「時刻の部分を設定」できるようです。

そこで、一度変数に格納してから、時刻を「00:00:00.000」に設定しました

var today4 = new Date();

today4.setHours(0, 0, 0, 0);
console.log(today4); // Sun Apr 30 2017 00:00:00 GMT+0900 (東京 (標準時))

ソースコードの読みやすさではピカイチですね。

setHoursは、ミリ秒を戻り値として返すので、さらにシンプルにできますね。

var today5 = new Date(new Date().setHours(0, 0, 0, 0));

console.log(today5); // Sun Apr 30 2017 00:00:00 GMT+0900 (東京 (標準時))


まとめ

今回は、いろいろと実装パターンが見つかりましたね~。

個人的には、ソースコードの読みやすさということで、「today4のパターン」を使おうと思っています。

正直なところ、今までDateオブジェクトには、何となく苦手意識がありました。

でも今回の調査で、少しだけ好きになれたかもしれません (^_^;