LoginSignup
68
26

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-04-30

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オブジェクトには、何となく苦手意識がありました。
でも今回の調査で、少しだけ好きになれたかもしれません (^_^;

68
26
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
68
26