5

最近、サーバーで実行中の 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として表示されていました。誰かがこれを以前に経験したり、見たりしたことがありますか?

4

2 に答える 2

1

固執しているように見える解決策を見つけました:-

サーバーにインストールされているFreeTDSバージョンを次の場所からダウングレードしました。

freetds.x86_64 0.91-2.el5  to 
freetds.x86_64 0.64-11.el5.centos

そして、それは日付を修正しました。

理由はわかりません。

于 2013-02-10T21:52:47.823 に答える
0

今日、2 月 7 日の DAYOFYEAR() は 38 です。

おそらく問題は日付形式にあります

于 2013-02-07T22:19:40.007 に答える