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