tkuchikiの日記

新ブログ https://blog.tkuchiki.net

Excel の 日付データ(数値)をプログラムで取得した際、テキストに変換する方法

PHPExcelで日付データを取得しようとしたときに、
1970/1/1 ではなく、 25569 が取得されてしまった。
調査した結果、Excel では、日付データを 1900/1/1 からの経過日数で保存しているためということがわかった。

ExcelではTEXTという関数があって、それを使えば変換できるようだが、そのためにプログラムからExcelを操作してどうこうするのも面倒だったので、PHPで変換する処理を書いた。

function text($serial, $format = 'Y-m-d H:i:s')
{
    return gmdate($format, ($serial - 25569) * 60 * 60 * 24);
}

結果

$ echo text(36526);
2000-01-01 00:00:00

Excelから取得したシリアル値から 25569 (1900/1/1 から 1970/1/1 の経過時間)で引けばOK。
他の言語でも問題ないはず。

参考:
http://www.relief.jp/itnote/archives/003294.php