首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 讀取 MSSQL DateTime 字段格式化顯示的三種解決方案

     編輯:PHP 相關知識

問題現象

使用 sqlsrv 或 mssql 擴展查詢 MSSQL DATETIME 字段時,PHP 返回 DateTime 對象而非字符串:

DateTime Object
(
    [date] => 2011-10-20 00:00:00
    [timezone_type] => 3
    [timezone] => Asia/Chongqing
)

直接 echo 會報錯或顯示不友好。

方案一:PHP 運行時配置(推薦 sqlsrv)

ini_set("mssql.datetimeconvert", 0);  // mssql 擴展
// 或
ini_set("sqlsrv.FormatDecimals", true); // sqlsrv 相關設置

在腳本最開頭設置,影響後續所有查詢。

方案二:修改 php.ini 全局生效

; 找到並修改
mssql.datetimeconvert = Off
; 或
sqlsrv.FormatDecimals = On

修改後重啟 PHP-FPM/Apache。適用於所有腳本,無需改代碼。

方案三:SQL 層面轉換(最通用、最可控)

SELECT *, CONVERT(VARCHAR, datetime_field, 120) AS str_datetime FROM table_name
  • 120:格式 yyyy-mm-dd hh:mi:ss(24h),ISO 8601 兼容。
  • 121:含毫秒 yyyy-mm-dd hh:mi:ss.mmm。
  • 其他常用格式:110 (mm-dd-yyyy)、111 (yyyy/mm/dd)、20 (yy-mm-dd)。

返回的 str_datetime 即為字符串,PHP 直接使用無需處理。

PHP 端格式化最佳實踐

// 獲取 DateTime 對象後
$dt = $row['datetime_field'];
if ($dt instanceof DateTime) {
    echo $dt->format('Y-m-d H:i:s');
}

// 或統一處理函數
function formatMssqlDateTime($val) {
    if ($val instanceof DateTime) return $val->format('Y-m-d H:i:s');
    if (is_string($val)) return $val;
    return '';
}

擴展選擇建議

擴展PHP 版本特點
mssql≤ 5.2官方已移除,僅舊項目維護
sqlsrv5.3+微軟官方驅動,功能完整,Windows 首選
pdo_sqlsrv5.3+PDO 接口,跨平台(Linux 需 ODBC 驅動)

新項目強烈建議使用 pdo_sqlsrv + 參數綁定,安全且可移植。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved