IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Procédural MySQL Discussion :

Date timestamp année 2038 (?)


Sujet :

SQL Procédural MySQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Date timestamp année 2038 (?)
    J'aimerais comprendre comment enregistrer les dates de créations dans la base mySPL (gérée par phpMyAdmin).

    Mon problème*: pour le 09/11/2006, MySql enregistre 20061109181511, et ensuite, la fonction date() retourne 19/01/2038.

    Quand je fais mktime(), j'obtiens 1163099946 pour le 09/11/2006...

    Alors c'est quoi le bon timestamp*? C'est 20061109181511 ou 1163099946*? Et pourquoi est-ce que MySQL enregistre un timestqmp qui donne ensuite une date différente*???

    Précisions*: ça fait 3 heures que je consulte pour résoudre ce pépin...

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Citation Envoyé par jeremiegimenez
    Mon problème*: pour le 09/11/2006, MySql enregistre 20061109181511, et ensuite, la fonction date() retourne 19/01/2038.

    Quand je fais mktime(), j'obtiens 1163099946 pour le 09/11/2006...
    Les timestamps de MySQL ne sont rien d'autre que des horodatages. 20061109181511 veut dire tout simplement 2006/11/09 18:15:11.

    mktime() n'est pas du MySQL mais du PHP, et il utilise les timestamps Unix, càd le nombre de secondes écoulées depuis le 1er janvier 1970 à 0h (ce qu'on appelle le début de l' "époque Unix"). Si tu demandes à MySQL de t'afficher cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select unix_timestamp(20061109181511) ;
    Il te donnera le timestamp Unix correspondant, à savoir 1163092511.
    De même, demande-lui :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select from_unixtime(1163099946) ;
    Tu obtiendras 2006-11-09 20:19:06, ce qui me laisse penser que tu as effectivement mis un bon moment à t'arracher les cheveux entre les deux tests

    Quant au 19/01/2038, c'est tout simplement la fin de l' "époque Unix", ce qui veut juste dire que 20061109181511 est trop gros pour être interprété comme un timestamp Unix.

    --
    Antoun

    Guide complet MySQL 5, par Antoine Dinimant, éd. MicroApplication
    http://www.microapp.com/livre_mysql_7873.html
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Merci pour l'explication sur TIMESTAMP
    Merci Antoun,

    Entre temps, je suis passé à SQL 5, ce qui arrange un peu les choses au niveau du comportement de timestamp.

    Par ailleurs, j'ai modifié le champ date en DATETIME au lieu de TIMESTAMP. Maintenant, je cherche le moyen de bien mettre en forme une date appelée depuis un champ DATETIME.

    Si je n'y parviens pas, je reviendrai à TIMESTAMP grâce à ton explication riche et précise.

    SPASIBA

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Citation Envoyé par jeremiegimenez
    Maintenant, je cherche le moyen de bien mettre en forme une date appelée depuis un champ DATETIME.
    En utilisant les fonctions ad hoc de SQL ou de PHP. Voici
    trois exemples pour obtenir du jj/mm/aaaa, je te laisse te reporter aux documentations officielles pour la liste des codes disponibles.
    en MySQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT DATE_FORMAT(une_date, '%d/%m/%Y') ;
    en PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    echo date($une_date, 'd/m/Y') ; 
    echo strftime($une_date, '%d/%m/%Y') ;
    Citation Envoyé par jeremiegimenez
    Si je n'y parviens pas, je reviendrai à TIMESTAMP grâce à ton explication riche et précise.
    Si tu n'y parviens pas avec DATETIME, tu n'y arriveras pas non plus avec TIMESTAMP, parce que pour MySQL il n'y a pas de vraiment de différence entre les deux. Les TIMESTAMP ne sont qu'un cas particulier de DATETIME (plage de validité réduite et comportement d'horodatage automatique).

    --
    Antoun

    Guide complet MySQL 5, par Antoine Dinimant, éd. MicroApplication
    http://www.microapp.com/livre_mysql_7873.html
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Antoun

    Les TIMESTAMP ne sont qu'un cas particulier de DATETIME (plage de validité réduite et comportement d'horodatage automatique).

    --
    Antoun

    Guide complet MySQL 5, par Antoine Dinimant, éd. MicroApplication
    http://www.microapp.com/livre_mysql_7873.html

    Encore merci Antoun.

    Mes encouragements pour ta prochaine accession au statut de Membre du forum*!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Date - contourner mktime et l'année 2038
    Par cedrick21 dans le forum Langage
    Réponses: 4
    Dernier message: 26/04/2011, 16h28
  2. [Dates] numéro année + numéro semaine
    Par auduma dans le forum Langage
    Réponses: 3
    Dernier message: 10/01/2006, 11h58
  3. conversion date timestamp vers date mysql
    Par seb0026 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 13/10/2005, 19h48
  4. Calcul de date en années ET mois
    Par priest69 dans le forum Access
    Réponses: 2
    Dernier message: 26/09/2005, 18h53
  5. Réponses: 4
    Dernier message: 06/02/2004, 16h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo