[英]Convert mssql datetime object to PHP string
我正在從數據庫中獲取一些信息,記錄采用 MSSQL DateTime 格式,當我返回它時,它在我的數組中顯示如下:
[arrayItem] => DateTime Object
(
[date] => 2008-06-05 09:14:11
[timezone_type] => 3
[timezone] => Europe/London
)
當我嘗試將其提取為數組(即$array[arrayItem][date]
)時,出現錯誤:
致命錯誤:不能使用 DateTime 類型的 object 作為數組
我還嘗試在 SQL 中格式化數據,然后再將其傳遞給 PHP,並且 strtotime 函數並沒有任何樂趣。
任何建議都會非常受歡迎,我用這個把頭發扯掉了!
謝謝
這也讓我失望了幾次。
希望這對你有幫助,因為它有我自己:)
http://af-design.com/blog/2010/03/13/microsoft-sql-server-driver-for-php-returns-datetime-object/
這是該頁面所說的要點,以防鏈接斷開。
當查詢定義為
datetime
的列時,本機 PHP SQL 服務器擴展返回一個字符串,而Microsoft 擴展返回一個 DateTime object。 因此,如果您期待一個字符串,則需要相應地調整您的代碼。
它繼續解釋說,您可以簡單地在對數據庫的請求中添加一個附加參數,指定您希望將日期作為字符串返回。 只需添加ReturnDatesAsStrings
參數,指定true
。
例子:
$connectionParams = array(
'USR'=>'user',
'PASS'=>'pass',
'Database'='myDatabase',
'ReturnDatesAsStrings'=>true //<-- This is the important line
);
$conn = sqlsrv_connect('127.0.0.1',$connectionParams);
然后,您可以像通常用於 sqlsrv 數據庫連接一樣使用$conn
,只有日期將作為字符串返回,而不是 DateTime 對象。
或者,如果您想要的只是日期時間之外的時間戳,您可以調用:
$myDateTimeObject->getTimestamp();
您應該像下面這樣訪問它們。 關聯索引arrayItem
包含一個具有一些屬性的 object。
$array['arrayItem']->date;
$array['arrayItem']->timezone_type;
嘗試這個。 這個對我有用:
$array['arrayItem']->format('Y-m-d H:i:s');
由於它是 object,因此您無法像使用數組一樣獲取屬性。 您需要->
符號才能訪問日期。 在您的問題中,您似乎 var_dumped 變量$arrayItem
,因此,像這樣使用它:
$date = strtotime($array['arrayItem']->date]);
echo $array['arrayItem']->format('Y-m-d H:i:s');
另一種解決方案是循環。
$_date = \DateTime::createFromFormat('D M d Y H:i:s e+', $the_date);
foreach($_dateStart as $row){
echo $row; // returns 2014-06-04 15:00
break; // stops at the first position
}
如果要在 PHP 頁面中顯示數據,只需復制並粘貼<?php?>
代碼:
$serverName = "your_sqlserver";
$username = "your_username";
$password = "your_password";
$database = "your_database";
$connectionInfo = array( "UID"=>$username, "PWD"=>$password, "Database"=>$database, "ReturnDatesAsStrings"=>true);
$connection = sqlsrv_connect($serverName, $connectionInfo);
$result = sqlsrv_query( $connection,"SELECT * from table'");
$msrow = sqlsrv_fetch_array($result);
print_r($msrow['column_name']);
它功能強大且易於使用。
您可以從日期 object 而不是字符串轉換日期,這是使用方法:
$obj->arrayItem->format('H:i:s')
$obj->arrayItem->format('Y-m-d')
這對我有用
date('Y-m-d', strtotime($rs->Fields('time')->value)
對於 MSSQL Server 上的 Adodb 連接
當您創建查詢時
SELECT created FROM yourTable ...
並且created
的是 DATETIME 類型,結果是您描述的 object 。 要將日期部分作為字符串返回,您可以在 SQL 級別上將其解決為
SELECT CONVERT(varchar, created, 23) AS created FROM yourTable ...
在這里看到 23 的意思。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.