Existe-t-il une fonction MySQL permettant de convertir un horodatage Unix en une date lisible par l'homme? J'ai un champ où je sauve des temps Unix et maintenant je veux ajouter un autre champ pour les dates lisibles par l'homme.
Utilisez FROM_UNIXTIME()
:
SELECT
FROM_UNIXTIME(timestamp)
FROM
your_table;
Voir aussi: Documentation MySQL sur FROM_UNIXTIME()
.
Ce qui manque dans les autres réponses (au moment de l'écriture) et qui n'est pas directement évident, c'est que from_unixtime
peut prendre un deuxième paramètre pour spécifier le format de la manière suivante:
_SELECT
from_unixtime(timestamp, '%Y %D %M %H:%i:%s')
FROM
your_table
_
Je pense que ce que vous cherchez, c'est FROM_UNIXTIME()
Voici un one-line si vous avez un accès rapide à la cli mysql:
mysql> select convert_tz(from_unixtime(1467095851), 'UTC', 'MST') as 'local time';
+---------------------+
| local time |
+---------------------+
| 2016-06-27 23:37:31 |
+---------------------+
Remplacez 'MST'
par le fuseau horaire souhaité. J'habite en Arizona ???? donc la conversion de UTC en MST.
Pourquoi se soucier de sauvegarder le champ comme lisible? Juste nous AS
SELECT theTimeStamp, FROM_UNIXTIME(theTimeStamp) AS readableDate
FROM theTable
WHERE theTable.theField = theValue;
EDIT: Désolé, nous stockons tout en millisecondes pas secondes. Fixe le.
Vous pouvez utiliser la fonction DATE_FORMAT. Ici une page avec des exemples et les modèles que vous pouvez utiliser pour sélectionner différents composants de date.
Manière simple et facile:
select from_unixtime(column_name, '%Y-%m-%d') from table_name
Comme je ne connaissais pas cette question, mysql stocke toujours l'heure dans les champs d'horodatage au format UTC, mais affichera (par exemple, phpmyadmin) dans le fuseau horaire local, j'aimerais ajouter mes résultats.
J'ai un champ last_modified mis à jour automatiquement, défini comme:
`last_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
En regardant avec phpmyadmin, on dirait que c'est en heure locale, en interne c'est UTC
SET time_zone = '+04:00'; // or '+00:00' to display dates in UTC or 'UTC' if time zones are installed.
SELECT last_modified, UNIX_TIMESTAMP(last_modified), from_unixtime(UNIX_TIMESTAMP(last_modified), '%Y-%c-%d %H:%i:%s'), CONVERT_TZ(last_modified,@@session.time_zone,'+00:00') as UTC FROM `table_name`
Dans toute constellation, UNIX_TIMESTAMP et 'as UTC' sont toujours affichés en heure UTC.
Exécutez-le deux fois, d'abord sans définir time_zone.