Convertir l'horodatage Unix en une date lisible par l'homme à l'aide de MySQL


222

Existe-t-il une fonction MySQL qui peut être utilisée pour convertir un horodatage Unix en une date lisible par l'homme? J'ai un champ où j'enregistre des temps Unix et maintenant je veux ajouter un autre champ pour les dates lisibles par l'homme.


1
Fonctions de date et d'heure dans le manuel mySQL
Pekka

Réponses:



108

Ce qui manque dans les autres réponses (au moment de la rédaction de ce document) et qui n'est pas directement évident, c'est qu'il from_unixtimepeut prendre un deuxième paramètre pour spécifier le format comme suit:

SELECT
  from_unixtime(timestamp, '%Y %D %M %H:%i:%s')
FROM 
  your_table

20
Problème très mineur, mais% h correspond aux heures au format 12 heures, ce qui nécessite alors% p pour être complet (AM / PM). Ou% H donne des heures au format 24 heures.
tlum


19

Besoin d'un horodatage Unix dans un fuseau horaire spécifique?

Voici une ligne si vous avez un accès rapide au 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 🌵 ainsi la conversion de l'UTC en MST.


7

Pourquoi prendre la peine de sauvegarder le champ comme lisible? Seulement nousAS

SELECT theTimeStamp, FROM_UNIXTIME(theTimeStamp) AS readableDate
               FROM theTable
               WHERE theTable.theField = theValue;

EDIT: Désolé, nous stockons tout en millisecondes et non en secondes. A corrigé.


4

Vous pouvez utiliser la fonction DATE_FORMAT. Voici une page avec des exemples et les modèles que vous pouvez utiliser pour sélectionner différents composants de date.


1

Manière facile et simple:

select from_unixtime(column_name, '%Y-%m-%d') from table_name


1

Depuis que j'ai trouvé que cette question n'était pas au courant, que mysql stocke toujours le temps dans les champs d'horodatage en UTC mais s'affichera (par exemple phpmyadmin) dans le fuseau horaire local, je voudrais 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 le regardant avec phpmyadmin, on dirait qu'il 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 temps UTC.

Exécutez-le deux fois, d'abord sans définir la zone de temps.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.