この記事のを書くきっかけ
「日付や時間の取り扱いについてうす〜く調べてみた〜その1」の続きです。
あれ、タイトル変わっちゃった。
計画立ててやらないといかんすね。汗
そう、時間を扱うことがあって、少し苦労したので最小限必要なことを抜き取ってみました。
なぜ薄く・・・なのか
これ、前回、書き忘れました。
理由は簡単。「忘れるもん」
細かく書いても読まないし、細かく理解しても忘れる。
繰り返せば覚えるんだけど、いや、日付や時間だけをずっと扱うことも少ない。
なので、「ああ、そんな感じだよね〜」っと理解できる程度にうす〜く扱っていきたいと思います。
公式というか、MDN
これは抑えておかねばならん。
復習
MDNを読むとわかりますが、1970年1月1日の0時0分0秒を基準にしてm秒単位でカウントアップしたものがシリアル値になります。
今の日付時刻を取得するもっともん簡単な方法
let now = Date();
console.log('今の時間',now)
出力
今の時間 – "Thu May 09 2024 12:40:41 GMT+0900 (日本標準時)"
実はこれって結構落とし穴になりました。
とにかく、今の時間を出したい時はいいと思うけど、これでなくてもいい。
let now = new Date();
console.log('今の時間2', now)
これは新しくコンストラクタを立ち上げる方法。new
があるかどうかだけが違い。
出力は同じ
今の時間2 – "Thu May 09 2024 12:40:41 GMT+0900 (日本標準時)"
特定の日時を指定したい
ISO8601の拡張形式で指定しましょう。
new Date
の引数に入れて表示します。
date_str1 = '2024-02-01T08:21:15Z'
let date1 = new Date(date_str1)
console.log('date1',date1)
日本時間で表示されました。あれ?+9時間。そうそう、指定した文字列の最後にZ
を入れるとUTCになります。でも僕のパソコン(mac)は日本にあるので+9時間です。
date1 - Thu Feb 01 2024 17:21:15 GMT+0900
時間を省いて引数に入れます。
date_str2 = '2024-03-01'
let date2 = new Date(date_str2)
console.log('date2',date2)
そうすると、UTCで0時0分0秒の日時を表示します。
またまた日本なので朝の9時になっています。グリニッジは0時0分。
date2 - Thu Feb 01 2024 09:00:00 GMT+0900
取得している日時を変更したい
一度取得した日時を変更します。
まずは今の時刻の再取得から
let now = new Date();
console.log('now', now);
now – Thu May 09 2024 12:52:34 GMT+0900 (日本標準時)
シリアル値の表示
console.log(now.getTime())
console.log('now', now)
1715226754009
2024年を1970年に変更
now.setUTCFullYear(1970)
console.log('set1970', now)
set1970 – Sat May 09 1970 12:52:34 GMT+0900 (日本標準時)
時間をUTC0時に。
now.setUTCHours(0)
console.log('set0h', now)
set0h – Sat May 09 1970 09:52:34 GMT+0900 (日本標準時)
月を1月に(0始まり)
now.setUTCMonth(0)
console.log('set0month', now)
set0month – Fri Jan 09 1970 09:52:34 GMT+0900 (日本標準時)
日付を1日に
now.setUTCDate(1)
console.log('set1date', now)
set1date – Thu Jan 01 1970 09:52:34 GMT+0900 (日本標準時)
時間差を計るときは、シリアル値で計算して表示するなど工夫すればなんとかなりそ。
let start = new Date("2024-05-09T08:21:15");
console.log('start', start)
let goal = new Date();
console.log('goal', goal)
let diff = goal.getTime() - start.getTime()
console.log('different millisec', diff)
let diffTime = new Date(diff);
console.log('different', diffTime.toString())
console.log('different ISO', diffTime.toISOString())
start – Thu May 09 2024 08:21:15 GMT+0900 (日本標準時)
goal – Thu May 09 2024 18:27:21 GMT+0900 (日本標準時)
different millisec – 36366575
different – "Thu Jan 01 1970 19:06:06 GMT+0900
different ISO – "1970-01-01T10:06:06.575Z"
タイム計測した結果をテキストに変換する時なんかはISOで文字型に変換して抜き取った方が良さそうですね。
ということで・・・
今僕ができる時間計算はこんな感じで行っています。
もっと良い方法を探してググってみよう。