データを保存する時に日付データをymd形式で保存するか、unixtimeで保存するか、悩んでしまうことがあり、そのデータを利用するシステムによって切り分けていましたが、やはりどちらのデータに統一した方が良さそうです。
ただ、現行システムでは、混在しているため、現時点ではデータを相互変換できるようにして対応したいと思います。
毎回、日付データなどを扱う時に、関数をいちいち自作しているので、スニペットも残しておいて今後の作業効率化を図りたいと思います。
YMDデータとUnixtimeデータの違い
少し原点にもどって、これらのデータの特性を考えてみたいと思います。
YMDデータについて
年/月/日 (yyyy/mm/dd)の8桁の数字で構成されるログを書き込む時の日時などで使われますが、見た目で何年何月何日が分かるという点で桁数が固定化できるというメリットがあります。
時間を入れると、以下のような14桁の数字になります。
年/月/日 時/分/秒
yyyymmddhhiiss
このデータのデメリットとしては、数値として扱う場合に、1時間後、30日後などのような計算が、プログラム関数で便利関数を持っている言語はありますが、独自で計算しようとすると非常に苦労するという点です。
月は12進数、時間は24進数、分と秒は60進数という、扱いづらい計算式になるのは、簡単に創造できます。
さらに、年以外のデータのそれぞれの桁数が1桁、2桁などの場合に桁数フォーマットを合わせる必要もあり、ごちゃっとしたプログラムになりがちです。
でも翌月というような算出の仕方はdateデータの方が計算しやすいかもしれませんね。
Unixtimeデータについて
1970/01/01からの秒数で表されており、「1556237415」のような10桁の数値で表されます。
もちろん1970年1月1日の午前0時0分0行は「0」という値になります。
日付データよりも桁数が少ないですが、年数が若くなっていくと、桁数も減っていくのでシスログで扱う時にはフォーマットが崩れる可能性があります。
ちなみに、phpのunixtimeとjavascriptのunixtimeのデフォルト値は3桁違うので気をつけないといけません。
これは、javascriptはmicro秒も含まれた状態で取得できるので、phpのunixtimeとjavascriptのunixtimeを比較する時には、桁数合わせ処理が必要になることを覚えておきましょう。
このフォーマットのデメリットは、年月日と逆で、見た目で何月何日なのかがわかりにくいという点がありますが、システムの計算などでしか使わないのであれば、こちらの方がデータで十分でしょう。
PHPでのデータ相互変換方法
YMD(年月日)の取得方法
# 現在時刻の取得
echo date("YmdHis");
> 20190426093110
Unixtimeの取得方法
# 現在時刻の取得
echo time();
> 1556238670
日付をUnixtimeに変換
echo date("YmdHis" , "1546268400");
> 20190101000000
Unixtimeを日付に変換
echo strtotime("2019-01-01 00:00:00");
> 1546268400
Microtimeの取得
list($usec, $sec) = explode(" ", microtime());
echo $usec;
echo $sec;
0.32310300
1556238922
0 件のコメント:
コメントを投稿