Конвертировать объект даты и времени mssql в строку PHP - PullRequest
14 голосов
/ 12 июля 2011

Я получаю некоторую информацию из базы данных, и запись в формате MSSQL DateTime, когда я возвращаю ее, она показывает в моем массиве следующее:

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

Когда я пытаюсь извлечь этокак массив (т.е. $array[arrayItem][date]) я получаю ошибку:

Неустранимая ошибка: невозможно использовать объект типа DateTime в качестве массива

Я также попытался отформатировать данныев SQL, прежде чем он передается в PHP, и strtotime функционирует и не доставляет радости.

Любые рекомендации будут очень кстати, я вырываю свои волосы с этим!

Спасибо

Ответы [ 9 ]

24 голосов
/ 12 июля 2011

Это меня несколько раз поймало.

Надеюсь, это поможет вам, как и мне самому:)

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

Вот суть того, что говорит эта страница в случае, если ссылка не работает.

При запросе к столбцу, определенному как datetime, расширение собственного PHP-сервера PHP возвращает строку, где в качестве расширение Microsoft возвращает 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();
6 голосов
/ 12 июля 2011

Вы должны получить к ним доступ, как показано ниже. ассоциативный индекс arrayItem содержит объект, обладающий некоторыми свойствами.

$array['arrayItem']->date;
$array['arrayItem']->timezone_type;
2 голосов
/ 12 марта 2015

Попробуй это.У меня это работает:

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

Ссылка: http://php.net/manual/en/datetime.format.php

2 голосов
/ 12 июля 2011

Поскольку это объект, вы не можете получить свойства, как вы делаете с массивом. Вам нужен знак -> для доступа к дате. В вашем вопросе кажется, что вы var_dumped переменная $arrayItem, так что используйте его следующим образом:

$date = strtotime($array['arrayItem']->date]);
1 голос
/ 27 июля 2012
echo $array['arrayItem']->format('Y-m-d H:i:s');
0 голосов
/ 24 марта 2017

Это сработало для меня

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

Для подключения Adodb на MSSQL Server

0 голосов
/ 01 июня 2016

Функциональность и простота использования.

Вы можете преобразовать дату из объекта даты вместо строки вот способ использования:

$obj->arrayItem->format('H:i:s')
$obj->arrayItem->format('Y-m-d')
0 голосов
/ 09 мая 2016

Если вы хотите отобразить данные на странице 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']);
0 голосов
/ 04 июня 2014

Другим решением является цикл.

$_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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...