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?
Pour ce faire, la méthode OO (et la plus flexible) utilise la classe DateTime
et utilise la méthode statique createFromFormat
pour instancier un nouvel objet DateTime
name__:
$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 format
de l'objet:
echo $new_datetime->format('d/m/y, H:i:s');
Pour démarrer, puisque vous avez un objet DateTime
name__, 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 DateTime
name__) et divers calculs de temps (combien de jours/mois/etc ... entre ceci et un autre DateTime
name__).
DateTime: http://php.net/manual/en/class.datetime.php Learn it. Aimer. Vivre.
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"]));
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
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.