web-dev-qa-db-fra.com

Comment convertir MySQL TIMESTAMP à l'heure de la date en PHP

J'ai une table de base de données MySQL avec une colonne nommée "timestamp", un type de timestamp et un attribut de on update CURRENT_TIMESTAMP et une valeur par défaut de CURRENT_TIMESTAMP.

Si j'ajoute un enregistrement à la table en spécifiant d'autres valeurs, mais pas l'horodatage, l'horodatage est automatiquement ajouté comme 2016-12-28 17:02:26.

Dans PHP j'interroge la table à l'aide de la requête suivante

SELECT * FROM history WHERE user_id = 9 ORDER BY timestamp ASC

Le résultat de la requête est enregistré dans $rows et j'utilise un foreach pour créer un tableau avec certaines des autres valeurs mises en forme. J'essaie de formater l'horodatage au format UK 24 heures heure: dd/mm/yy, HH:MM:SS.

J'ai essayé à la fois les fonctions date() et strftime() comme suit:

$formatted_datetime = strftime("%d %m %y  %H %M %S", $row["timestamp"]); 
$formatted_datetime = date("d/m/y, H:i:s", $row["timestamp"]);

Les deux résultent dans la notification suivante et la date et l'heure sont affichées de manière incorrecte comme 01 01 70 00 33 36:

Avis: Une valeur numérique non bien formée rencontrée dans /home/ubuntu/workspace/pset7/public/history.php à la ligne 20

Je suis nouveau dans PHP et MySQL. Aucune des autres questions ou documentation que j’ai déjà vue n’a été traitée avec succès lors de la conversion. Je ne comprends pas pourquoi strftime() ne fonctionne pas, ni comment le faire correctement?

5
Toby

Pour ce faire, la méthode OO (et la plus flexible) utilise la classe DateTimeet utilise la méthode statique createFromFormatpour instancier un nouvel objet DateTimename__:

$new_datetime = DateTime::createFromFormat ( "Y-m-d H:i:s", $row["timestamp"] );

Vous pouvez maintenant utiliser l'objet $new_datetime pour générer la représentation de chaîne de votre choix en appelant la méthode formatde l'objet:

echo $new_datetime->format('d/m/y, H:i:s');

Pour démarrer, puisque vous avez un objet DateTimename__, vous pouvez maintenant effectuer toutes sortes de transformations (telles que le décalage des fuseaux horaires ou l’ajout de jours), la comparaison (supérieure ou inférieure à un autre DateTimename__) et divers calculs de temps (combien de jours/mois/etc ... entre ceci et un autre DateTimename__).

DateTime: http://php.net/manual/en/class.datetime.php Learn it. Aimer. Vivre.

6
Ray

Normalement, dans MySQL, l'horodatage de la date permet de gagner du temps en tant que YYYY-MM-DD HH:MM:SS (2016-12-20 18:36:14)formate, vous pouvez facilement les convertir à votre guise à l'aide du format de date, mais vous devez d'abord convertir votre entrée en heure. Suivre fera l'affaire

$formatted_datetime = date("d/m/y, H:i:s", strtotime($row["timestamp"]));
2
reza

Pourquoi ne pas faire travailler MySQL? Et vous voulez vraiment mm/jj/aa, pas jj/mm/aa?

SELECT *, DATE_FORMAT(timestamp, '%m/%d/%y, %T') formatted_date FROM ....

Ensuite, vous pouvez extraire la date formatée sous la forme $ row ['formatted_date'].

Voir https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format

1
Giles B

J'utiliserais la classe Carbon et son formatage de chaîne

$carbon = Carbon::instance('2016-12-28 17:02:26');

Ensuite, vous pouvez le formater comme vous le souhaitez.

0
Samuel