簡體   English   中英

將 mssql 日期時間 object 轉換為 PHP 字符串

[英]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');

參考: http://php.net/manual/en/datetime.format.php

由於它是 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM