Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

strtotimeの落とし穴


アシアルさんの記事じゃありません。全く別物です :-)


strtotime関数はGNU Date Input Formats形式に準拠した文字列をタイムスタンプ形式に変えるためのものです。

この関数に「年月日時分秒」を表す14桁の数字を渡すと、誤認識される場合があります。以下はPHP4.4.6で試した結果です。

<?php
// 「533746800」になる
$tm = strtotime('20070402000000');
// 「19861201000000」と表示される
echo date('YmdHis', $tm);

ということで、Smartyの古いバージョン(2.6.10以前)のshared.make_timestamp.phpにあるような使い方をしていると痛い目に遭います。。。というか、古いシステムで日付表示関連の障害が出て分かっただけですが orz
ちなみに、PHP5.2.1では正しく「20070402000000」と表示されます。