J'essaie de récupérer la date de ma base de données dans un horodatage standard et de l'afficher en ISO 8601. Je ne peux pas le faire facilement en PHP donc j'essaie de le faire en mon instruction SELECT. Voici ce que j'ai, mais elle affiche une erreur:
SELECT * FROM table_name ORDER BY id DESC DATE_FORMAT(date,"%Y-%m-%dT%TZ")
Qu'est-ce que je fais mal?
La DATE_FORMAT(DateColumn)
doit être dans la liste SELECT
:
SELECT DATE_FORMAT(date, '%Y-%m-%dT%TZ') AS date_formatted
FROM table_name
ORDER BY id DESC
Cela a fonctionné pour moi
DATE_FORMAT( CONVERT_TZ(`timestamp`, @@session.time_zone, '+00:00') ,'%Y-%m-%dT%TZ')
DATE_FORMAT ne fonctionne que sur les colonnes de date MySQL, pas sur les horodatages.
Un horodatage UNIX est un entier contenant le nombre de secondes depuis le 1er janvier 1970 UTC. Pour formater cela comme une date ISO 8601, vous devez utiliser la fonction FROM_UNIXTIME () à la place.
FROM_UNIXTIME prend les mêmes chaînes de format que DATE_FORMAT, donc pour formater une colonne nommée "créée", vous devez:
SELECT created /* e.g. 1288799488 */ ,
FROM_UNIXTIME(created,'%Y-%m-%dT%TZ') /* e.g. 2010-11-03T08:51:28Z */
FROM table_name
Pourquoi est-il difficile de le faire en PHP?
date("Y-m-d\TH:i:sO",strtotime($sqldata['time']));
Quoi qu'il en soit, que DATE_FORMAT
doit être dans les champs à sélectionner, pas cloué à la fin.
Vous devez déplacer le DATE_FORMAT vers la partie sélectionnée de votre requête comme ceci:
SELECT *, DATE_FORMAT(date,"%Y-%m-%dT%TZ") AS date FROM table_name ORDER BY id DESC
Charger le champ de date à partir de la base de données et le convertir au format ISO avec PHP est simple; voir la chaîne de format c
à PHP date
: http://www.php.net/manual/en/function.date.php
echo date('c'); // expected "2013-03-08T14:45:37+05:00"
DATE_FORMAT(date, '%Y-%m-%dT%TZ')
doit être dans la clause select
.
SELECT DATE_FORMAT(date, '%Y-%m-%dT%TZ')
FROM table_name
ORDER BY id DESC