我从数据库中获取一些信息并且记录采用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功能并没有任何乐趣。
任何建议都会非常受欢迎,我正用这个推理我的头发!
由于
答案 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');
答案 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。