最近、サーバーで実行中の PHP のバージョンを 5.3.20 にアップグレードしました。それ以来、MSSQL データベース (mssql_query) から日時を取得するたびに、奇妙に間違った日付が表示されます。
ロケール設定を確認しましたが、デフォルトのタイムゾーンは「オーストラリア/ブリスベン」に設定されています。php.ini 設定も確認し、mssql.datetimeconvert
オフになっていることを確認しました。オプションをオンにすると、日付は事前にフォーマットされているように見えますが (秒なし)、オプションをオフにすると、次のような日付が表示されます。
mssql.datetimeconvert (オフ): 2013-07-38 16:00:20
mssql.datetimeconvert (オン): 2013 年 2 月 7 日 09:37PM
簡単な修正はありますか?
mysql/mssql ソース間の出力を比較するコードは次のとおりです。
$rs = $db->query("select id, servertime from bobstable where id = 86427420");
$mss_set = mssql_query("select id, servertime from T_bobstable WITH (NOLOCK) where id = 86427420");
$myrow = $rs->fetch_assoc();
$msrow = mssql_fetch_array($mss_set);
var_dump($myrow);
echo "<br>";
var_dump($msrow);
次のように出力します。
array(2) { ["id"]=> string(8) "86427420" ["servertime"]=> string(19) "2013-02-08 14:00:24" }
array(4) { [0]=> float(86427420) ["id"]=> float(86427420) [1]=> string(19) "2013-08-39 24:673:0" ["servertime"]=> string(19) "2013-08-39 24:673:0" }
これは、SQL Server Studio から直接受け取った出力です
2013-02-08 14:00:24.673
それがどのようにフォーマットされているかは理解できますが (問題のその部分は以下で回答されているため)、なぜこのフォーマットで送信されるのか、またはこれを回避するために PHP の構成を変更する方法を理解できません。PHP をアップグレードする前は、2013-02-08 14:00:24として表示されていました。誰かがこれを以前に経験したり、見たりしたことがありますか?