将mssql datetime对象转换为PHP字符串

时间:2011-07-12 10:21:30

标签: php sql-server datetime

我从数据库中获取一些信息并且记录采用MSSQL DateTime格式,当我返回时,它在我的数组中显示如下:

[arrayItem] => DateTime Object
    (
        [date] => 2008-06-05 09:14:11
        [timezone_type] => 3
        [timezone] => Europe/London
    )

当我尝试将其提取为数组(即$array[arrayItem][date])时,我收到错误:

  

致命错误:无法使用DateTime类型的对象作为数组

我还尝试在将数据传递给PHP之前在SQL中格式化数据,并且strtotime功能并没有任何乐趣。

任何建议都会非常受欢迎,我正用这个推理我的头发!

由于

10 个答案:

答案 0 :(得分:24)

这也让我感到很沮丧。

希望这对你有所帮助:)

http://af-design.com/blog/2010/03/13/microsoft-sql-server-driver-for-php-returns-datetime-object/

以下是该页面所说内容的要点,以防链接出现故障。

  

查询定义为datetime的列时,native PHP SQL Server extension返回一个字符串,其中Microsoft extension返回DateTime对象。因此,如果您需要字符串,则需要相应地调整代码。

接着解释说,您可以简单地向数据库的请求添加一个附加参数,指定您希望将日期作为字符串返回。 只需添加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);

然后您可以像定期使用$conn一样使用sqlsrv数据库连接,只有日期将作为字符串返回,而不是DateTime对象。

另外,如果你想要的只是你可以打电话的日期时间的时间戳:

$myDateTimeObject->getTimestamp();

答案 1 :(得分:6)

您应该像下面一样访问它们。关联索引arrayItem包含一个具有某些属性的对象。

$array['arrayItem']->date;
$array['arrayItem']->timezone_type;

答案 2 :(得分:2)

由于它是一个对象,因此无法像使用数组那样获取属性。您需要->标志才能访问日期。在你的问题中,似乎你var_dumped变量$arrayItem,所以,使用它像这样:

$date = strtotime($array['arrayItem']->date]);

答案 3 :(得分:2)

试试这个。它对我有用:

$array['arrayItem']->format('Y-m-d H:i:s');

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

答案 4 :(得分:1)

echo $array['arrayItem']->format('Y-m-d H:i:s');

答案 5 :(得分:0)

另一个解决方案是循环。

$_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
}

答案 6 :(得分:0)

如果您想在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']);

答案 7 :(得分:0)

功能强大,使用简单。

您可以从日期对象而不是字符串转换日期 这是如何使用的方式:

$obj->arrayItem->format('H:i:s')
$obj->arrayItem->format('Y-m-d')

答案 8 :(得分:0)

这对我有用

date('Y-m-d', strtotime($rs->Fields('time')->value)

用于MSSQL Server上的Adodb连接

答案 9 :(得分:0)

当您创建查询时

SELECT created FROM yourTable ...

created 是 DATETIME 类型,结果是您描述的对象。要将日期部分作为字符串返回,您可以在 SQL 级别将其解决为

SELECT CONVERT(varchar, created, 23) AS created FROM yourTable ...

参见 23 的含义 here