Javascriptでデータベースに日付(時間)データを格納して取り出して表示したい
いろいろとDate()オブジェクトを活用すれば文字列や時間オブジェクトへ変換などできそうである。
React/TypeScript を利用して Node.js の mongoose を介して MongoDB へ情報を登録する、となるとDateオブジェクトとして型を簡単に受け渡しできるのかどうかよくわからないので、一旦の解決策として Date オブジェクトの受け渡しを「Unix時間」としてみる。
Javascript Date()オブジェクトでユニックス時間を取得する
これが最も自分の目的にあっているのでは?と思っている。
// データベースで見て計算しやすいようにunix timeで格納する
const dtime = new Date().getTime() / 1000.0;
これでMongoDBに格納しておいて(float型)取り出し側で以下のようにして時間へ変換する。
// Unix timeから普通の読めるやつへの時間変換
let convTime = new Date(time_on_db * 1000);
これでJST時間への変更が問題なくできた。
時間は文字列にしてしまっても良いのだが、あとあと差分を計算するとか考えるとDBへの格納はUnix時間が最適なのではないかと思っている。
この例だと丸められて時間の誤差は1秒未満のは精度を失うと思うが自分には問題はない。
(2022/03/25時点)
差分を取得する:目的=今の時間から24時間以内の更新を調べる
const time_on_db = item.datetime * 1000.0;
// 今日の日付のやつを選択する
const todayNow = new Date().getTime();
// Unix timeから普通の読めるやつへの時間変換
const convTime = new Date(time_on_db * 1000);
// 現在からの乖離時間を計算(単位は hours)
const diff_hours = (todayNow - time_on_db) / 1000.0 / 3600.0;
console.log(diff_hours);
if (diff_hours < 24.0) return true;