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

PHP & Base de données Discussion :

timestamp universel ?


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 175
    Par défaut timestamp universel ?
    Bonjour,

    J'ai besoin pour mon site d'enregistrer la datetime au moment où l'utilisateur effectue une action pour pouvoir ensuite la comparer avec de précedents enregistrements.
    A savoir que l'utilisateur peut etre dans n'importe quel pays donc il y aura le fuseau horaire a gérer si je veux afficher la datetime sur le site mais ça c'est secondaire.
    Tout est stocké dans une base mysql.

    La datetime peut parfois être crée en php, mysql ou meme javascript.

    Une gestion en interne avec un timestamp Unix pourrai convenir car je n'utilise pas de date avant 1970 et si mon site existe toujours dans 20ans, ça ne me dérange de corriger le futur bug a ce moment là.

    Mon problème c'est que je ne trouve pas d'informations claire concernant la compatibilité du timestamp entre php, mysql et javascript.
    Comment être sûr que le timestamp sera identique si 2 utilisateurs effectue une action au même moment dans 2 pays différents (donc avec des heures différentes a cause des fuseaux horaires) et que pour l'un le timestamp est crée en php(ou mysql) et que pour l'autre le timestamp est crée en javascript (oublions que dans ce cas l’utilisateur peut falsifier cette information).

    J'imagine qu'il n'y a rien de compliqué dans ce que je veux faire mais j'ai besoin d'un avis éclairé pour m’ôter tous ces doutes.

    J'ai notamment lu que le timestamp de php et de mysql sont différents.
    Et comparer des datetime crées avec des fonctions de 3 langages différents ça me fait un peu peur. (au niveau du format et aussi de la gestion des fuseaux horaire).

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 175
    Par défaut
    Je me réponds:

    Pour avoir un datetime universel il faut que je me base sur l'échelle de temps UTC:
    https://fr.wikipedia.org/wiki/Temps_...coordonn%C3%A9

    Alors en javascript j'ai trouvé ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      maintenant = Math.round(Date.now()/1000);   // Nombre de secondes écoulées depuis le 1er Janvier 1970 00:00:00 UTC
    en php c'est ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $date = new DateTime();
    echo $date->getTimestamp();    // Nombre de secondes écoulées depuis le 1er Janvier 1970 00:00:00 UTC

    Pour mysql je ne sais pas encore comment gérer ça.
    Pour le moment j'enregistre au format datetime mais ce n'est peut être pas le format idéal dans mon cas.
    Il y a beaucoup de docs, mais en anglais c'est pas simple.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 59
    Par défaut fonction mysql UTC_TIMESTAMP()
    As tu regardé la fonction de mysql UTC_TIMESTAMP() elle à l'air de vouloir faire ce que tu veux !

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Par défaut
    - Un timestamp unix est un timestamp unix. C'est universel et identique, que tu le génères à partir de pHP, MySQL, Javascript ou ton système d'exploitation (à condition de le générer convenablement).
    - En PHP, le plus simple pour avoir un timestamp est la fonction time()
    - En MySQL, la fonction UTC_TIMESTAMP() - attention, elle peut retourner une date ou un timestamp, suivant le champ dans lequel tu le stockes.
    - En javascript, c'est comme tu l'as trouvé, avec Date.now() tu obtiens des milliseconds que tu dois convertir.

  5. #5
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 260
    Par défaut
    time() retourne l'heure courante, mesurée en secondes depuis le début de l'époque UNIX, (1er janvier 1970 00:00:00 GMT).
    Le timestamp est donc universel. Soit tu as besoin de connaitre les horaires depuis chez toi, et tu as juste à gérer ton décalage horaire par rapport à Greenwitch, soit as besoin de l'heure locale à la connexion et il te faut alors gérer la géolocalisation pour en déduire le fuseau horaire.

    Tu peux regarder aussi la fonction JavaScript getTimezoneOffset()
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 175
    Par défaut
    Merci pour vos réponses.

    J'hésitais encore un peu mais après des recherches supplémentaires et une bonne réflexion, j'ai décidé de changer le type de la plupart de mes champs datetime vers le type timestamp.
    Les fonctions de convertion (pour l'affichage) ne manque pas dans les différents languages et j'obtiendrai une plus grande rapidité (et simplicité) au niveau des opérations de recherche et de comparaison ainsi qu'un risque d'erreur quasi nul.

Discussions similaires

  1. [VB6][Expert Only ?][ADO] Format universel des dates
    Par HPJ dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 14/02/2004, 10h42
  2. Réponses: 4
    Dernier message: 06/02/2004, 16h23
  3. Conversion Timestamp vers varchar
    Par stejutt dans le forum SQL
    Réponses: 4
    Dernier message: 08/01/2004, 08h46
  4. recuperation du mois avec un timestamp
    Par matrxjean1984 dans le forum Requêtes
    Réponses: 3
    Dernier message: 16/10/2003, 14h41
  5. En quoi XML est-il un moyen universel d'échange de données ?
    Par Pomalaix dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 27/01/2003, 11h29

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