↓の記事でも触れたけど、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
);
これを実行すると…
無事に変換できた!!!
こうでもいいっちゃいい。