この記事をシェアする

【EXCEL芸】EXCELのセルに入力した日時の文字列をUNIXタイムスタンプに変換してみる

↓の記事でも触れたけど、UNIXタイムスタンプってのは1970/1/1 00:00:00からの経過秒数のことである。

一方、EXCELでは日時を「シリアル値」という、UNIXタイムスタンプとは異なる値で管理している(デフォルトではUNIXタイムスタンプを扱えない)。このシリアル値ってのは1900/1/1を1とした「経過日数」であり、例えば1900/1/2は2となる。

時間、分、秒については小数点で管理されている。

つまり、シリアル値×60×60×24でUNIXタイムスタンプと同じく秒数に変換できるわけだが、Excelのシリアル値とUNIXタイムスタンプは基準となる日付が違うため、実際のUNIXタイムスタンプとは大幅なズレが生じてしまう。

ではどうするか。

何度も述べているように、UNIXタイムスタンプってのは1970/1/1 00:00:00からの経過秒数である。つまり、タイムスタンプに変換したい日時のシリアル値と1970/1/1 00:00:00のシリアル値の差を求め、その値に60×60×24を掛けることで、タイムスタンプになるって寸法よ。

これが
こうなる

良さげ。本当にこれがタイムスタンプとして正しいかPHPで検証してみる。

<?php
echo date('Y-m-d H:i:s', 1644364800);

これを実際に動かしてみると…ドン。

あれ? なんか9時間ズレてる…

よく考えたら日本の時計は世界標準時より9時間進んでるんだからそれを考慮しないといけないんだわ。つまり9時間(60×60×9)分の秒数を引けばいいわけで…

<?php
echo date('Y-m-d H:i:s', 1644332400
);

これを実行すると…

無事に変換できた!!!

こうでもいいっちゃいい。

この記事をシェアする