SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 社員募集 ...

【php】SQL Serverの日付型カラムがDatetimeクラスのオブジェクトとして取得されてしまう

問題

Windows + IIS + php5.4 + SQL Server(SQLSRV) をしていて、問題です。

日付型カラムを取得したときに、日付のカラムは文字列(2012-09-11 12:34:56 など)ではなくて、Datetime型のオブジェクトになっているみたいです。

$serverName = "serverName\instanceName";
$connectionInfo = array( "Database"=>"dbName", "UID"=>"username", "PWD"=>"password");
$conn = sqlsrv_connect( $serverName, $connectionInfo );

$sql = "select * from member";
$stmt = sqlsrv_query( $conn, $sql );

while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
      var_dump($row);
}

...
  ["JOIN_DATE"]=>
  object(DateTime)#1 (3) {
    ["date"]=>
    string(19) "2012-04-20 00:00:00"
    ["timezone_type"]=>
    int(3)
    ["timezone"]=>
    string(3) "UTC"
  }
...

そういうことなら、$row['JOIN_DATE']->format('Y-m-d H:i:s'); といった形で、Datetimeオブジェクトのメソッドを使って日付の文字列は取得できるのですが。。。

やっぱり今までどおり、文字列で欲しい。どうにもならないでしょうか?

答え

接続に以下のオプションを追加すると、日付が文字列として取得できる。

"ReturnDatesAsStrings"=>true

上のサンプルコードのsqlsrv_connect()関数の第2引数のオプションの配列に含める。

結果

...
  ["JOIN_DATE"]=>
  string(23) "2012-04-20 00:00:00.000"
...

参考

http://msdn.microsoft.com/en-us/library/ee376928%28SQL.90%29.aspx

関連するメモ

コメント