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

将mssql datetime对象转换为PHP字符串,php,sql-server,datetime,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

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

[arrayItem] => DateTime Object
    (
        [date] => 2008-06-05 09:14:11
        [timezone_type] => 3
        [timezone] => Europe/London
    )
当我试图将其提取为数组时(即
$array[arrayItem][date]
),我得到一个错误:

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

在将数据传递到PHP和strotime函数之前,我也尝试过用SQL格式化数据,但没有任何乐趣

任何建议都将是非常受欢迎的,这一条我简直是疯了


谢谢

这也让我抓狂了好几次

希望这能像我一样帮助你:)

以下是该页面所说的要点,以防链接中断

在查询定义为
datetime
的列时,将返回一个字符串,其中as将返回一个datetime对象。因此,如果需要字符串,则需要相应地调整代码

它接着解释说,您可以简单地向数据库的请求中添加一个附加参数,指定希望将日期作为字符串返回。只需添加
returnDateSasString
参数,指定
true

例如:

$connectionParams = array(
    'USR'=>'user',
    'PASS'=>'pass',
    'Database'='myDatabase',
    'ReturnDatesAsStrings'=>true  //<-- This is the important line
);
$conn = sqlsrv_connect('127.0.0.1',$connectionParams);

因为它是一个对象,所以不能像处理数组那样获取属性。您需要
->
符号才能访问日期。在您的问题中,似乎您将变量
$arrayItem
转储,因此,请如下使用:

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

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

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

另一个解决方案是循环

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

试试这个。这对我很有用:

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

参考:

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

它功能强大,使用简单

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

$obj->arrayItem->format('H:i:s')
$obj->arrayItem->format('Y-m-d')
这对我有用

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

对于MSSQL服务器上的Adodb连接

SELECT created FROM yourTable ...
创建的
是DATETIME类型,结果就是您描述的对象。要以字符串形式返回日期部分,可以在SQL级别上按如下方式进行求解:

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

查看23的含义。

谢谢,尝试了这个,但不幸的是它不起作用strotime($array[arrayItem->date])尝试
strotime($array['arrayItem']->date])
非常感谢,只是返回了一个空白-我认为有什么事情搞砸了我的结局!:)不过,布莱恩的解决方案对我很有效。再次感谢Hanks,但这只返回一个空值:($array['arrayItem']->date;对我来说也很有用!
SELECT created FROM yourTable ...
SELECT CONVERT(varchar, created, 23) AS created FROM yourTable ...