Je récupère des informations dans une base de données et l'enregistrement est au format DateTime MSSQL. Lorsque je le renvoie, il s'affiche dans mon tableau comme suit:
[arrayItem] => DateTime Object
(
[date] => 2008-06-05 09:14:11
[timezone_type] => 3
[timezone] => Europe/London
)
Lorsque j'essaie d'extraire ceci sous forme de tableau (c'est-à-dire $array[arrayItem][date]
), j'obtiens une erreur:
Erreur fatale: impossible d'utiliser un objet de type DateTime en tant que tableau
J'ai également essayé de formater les données en SQL avant qu'elles ne soient transmises à PHP, et les fonctions strtotime n'ont eu aucune joie.
Toute recommandation serait la bienvenue, je me déchire les cheveux avec celui-ci!
Merci
Cela m'a aussi surpris deux fois.
J'espère que cela vous aidera, car c'est ce que j'ai moi-même :)
http://af-design.com/blog/2010/03/13/Microsoft-sql-server-driver-for-php-returns-datetime-object/
Voici l'essentiel de ce que dit cette page, au cas où le lien tomberait.
Lorsque vous interrogez une colonne définie comme
datetime
, le native PHP extension SQL Server renvoie une chaîne où, comme l'extension Microsoft , renvoie un objet DateTime. Donc, si vous attendez une chaîne, vous devrez ajuster votre code en conséquence.
Il est ensuite expliqué que vous pouvez simplement ajouter un paramètre supplémentaire à vos demandes dans la base de données, en précisant que vous souhaitez que vos dates soient renvoyées sous forme de chaînes. Ajoutez simplement le paramètre ReturnDatesAsStrings
, en spécifiant true
.
Exemple:
$connectionParams = array(
'USR'=>'user',
'PASS'=>'pass',
'Database'='myDatabase',
'ReturnDatesAsStrings'=>true //<-- This is the important line
);
$conn = sqlsrv_connect('127.0.0.1',$connectionParams);
Ensuite, vous pouvez utiliser $conn
comme vous le feriez régulièrement pour votre connexion à la base de données sqlsrv. Seules les dates seront renvoyées sous forme de chaînes, au lieu d'objets DateTime.
Alternativement , si vous vouliez seulement un horodatage en dehors de la date et l'heure, vous pouvez appeler:
$myDateTimeObject->getTimestamp();
Vous devriez y accéder comme ci-dessous. l'index associatif arrayItem
contient un objet qui possède certaines propriétés.
$array['arrayItem']->date;
$array['arrayItem']->timezone_type;
Comme c'est un objet, vous ne pouvez pas obtenir les propriétés comme vous le faites avec un tableau. Vous avez besoin du signe ->
pour accéder à la date. Dans votre question, il semble que vous ayez var_dumpé la variable $arrayItem
, utilisez-la ainsi:
$date = strtotime($array['arrayItem']->date]);
Essaye ça. Ça marche pour moi:
$array['arrayItem']->format('Y-m-d H:i:s');
Référence: http://php.net/manual/en/datetime.format.php
echo $array['arrayItem']->format('Y-m-d H:i:s');
Si vous souhaitez afficher les données dans la page PHP, il vous suffit de copier et coller le code <?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']);
Cela a fonctionné pour moi
date('Y-m-d', strtotime($rs->Fields('time')->value)
Pour la connexion Adodb sur le serveur MSSQL
Une autre solution consiste à faire une boucle.
$_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
}
C'est une fonctionnalité simple à utiliser.
Vous pouvez convertir un objet date à partir d'une date au lieu de la chaîne , Voici comment utiliser:
$obj->arrayItem->format('H:i:s')
$obj->arrayItem->format('Y-m-d')