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。
他の言語でも問題ないはず。