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 :

Date : Conversion Fr --> Mysql + Comparaison


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 25
    Points : 5
    Points
    5
    Par défaut Date : Conversion Fr --> Mysql + Comparaison
    Bonjour,

    Je débute en Php Mysql, j'ai tout de même grace aux forums et à l'entraide reussi à mettre en place un formulaire de creation / modification de documents correspondant à mes besoins.

    Le soucis aujourd'hui, c'est que je coince sur les dates, le formatage etc.
    J'ai beau lire et essayer d'appliquer ce que j'ai trouvé en cherchant sur le forum et ailleurs, je m'en sors pas.

    Mes besoins :

    Que grace à un formulaire, l'utilisateur puisse rentrer des date + heure (debut d'evenement et fin d'evenement), que celles-ci soient enregistrées dans ma bdd (mysql), et qu'un champs calcule automatiquement la durée entre ces 2 dates.

    Problème 1 :

    Mysql a besoin de recevoir une date au format suivant :
    0000-00-00 00:00:00
    (AAA-MM-JJ HH:MM:SS)

    Mais comme chacun sait, les utilisateurs français utilisent ce format :
    JJ-MM-AA HH:MM

    J'ai donc besoin que ce que l'utilisateur insère soit formaté correctement pour Mysql.
    J'aimerais qu'il se passe si possible d'entrer les secondes (je remarque que si je ne mets pas les secondes, ma bdd ne comprend pas).

    ---> J'ai pensé à séparer mon champs Date en plusieurs champs :
    un champs Jour
    un champs Mois
    un champs Heures-Minutes
    (en intégrant automatiquement l'année actuelle et les secondes)

    Mais je pige carrément pas comment faire ensuite, j'arrive même à visualiser ou comprendre comment et ou faire ce reformatage !

    Problème 2 :

    Une fois que j'aurais compris comment formater ma date de Fr-Mysql, j'aimerais pouvoir comparer 2 dates et implémeter un champs "durée" qui calculera automatiquement la différence de temps entre les 2 dates en donnant un résultat sous la forme :
    X jours et X Heures.
    La aussi je suis perdu .

    Merci d'avance pour votre aide.

    ps : j'ai lu les manuels php en ligne sur les dates, essayer plusieurs scripts, plusieurs methodes de personnes ayant posé la même question, je fais un blocage ici ça ne passe pas.
    Je crois que j'ai surtout besoin de comprendre.

    Merci encore !

    ci-joint la partie du formulaire concernant les dates, j'y fais apparaitre dans le champs les dates/ heures actuelles qui sont indicateurs pour l'utilisateur du format et de la date actuelle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <p>
    <span class="messageAlerte"></span>
    <label for="signal" title="Veuillez saisir la date du Signalement" class="oblig">* Date & Heure du Signalement :</label>
    	<input type="text" name="signal_d" id="signal_d" title="Veuillez Indiquer l'heure de Signalement" tabindex="2" onfocus="this.className='focus';" onblur="this.className='normal';" value="<?php echo date ('d'); ?>" />
    	<input type="text" name="signal_m" id="signal_m" title="Veuillez Indiquer l'heure de Signalement" tabindex="3" onfocus="this.className='focus';" onblur="this.className='normal';" value="<?php echo date ('m'); ?>" />
    	<input type="text" name="signal_y" id="signal_y" title="Veuillez Indiquer l'heure de Signalement" tabindex="4" onfocus="this.className='focus';" onblur="this.className='normal';" value="<?php echo date ('H:i:s'); ?>" />
    </p>

  2. #2
    Membre régulier Avatar de Rodrick
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 92
    Points : 91
    Points
    91
    Par défaut
    Bonjour!!!

    Tu peux enregistrer les dates au format anglais dans la base de données et utiliser ce script que j'ai fais pour l'affichage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
     
    function datefr($date)
    {
      $split = split("-",$date); 
      $annee = $split[0]; 
      $mois = $split[1]; 
      $jour = $split[2];
      $m = date('n',mktime('0','0','0',$mois,$jour,$annee)); ;
      $j = date('w',mktime('0','0','0',$mois,$jour,$annee));
      $nomjour= array ('Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi');
      $nommois = array('','Janvier', 'F&eacute;vrier', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Ao&ucirc;t', 'Septembre', 'Octobre', 'Novembre', 'D&eacute;cembre');
      return $nomjour[$j] ." "."$jour"." ". $nommois[$m] ." "."$annee";
    }
    function heurefr($heure)
    {
        $split = split(":",$heure);
        return $split[0]. ":" . $split[1];
    }
    Il faudrait que tu l'utilises de cette façon :
    datefr(dateang);
    où dateang est la date récupéré dans la base de données
    Même chose pour heurefr.

    Ensuite, pour la saisie d'une date ou d'une heure, fais le avec des select comme ça tu es sûr que l'utilisateur ne fera pas d'erreur comme rentrer une lettre à la place d'un chiffre.

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 25
    Points : 5
    Points
    5
    Par défaut
    Bonjour et merci pour ton script.

    Celui-ci me permet d'avoir un affichage en français et avec des phrases de la date de ma bdd.
    Malheureuseusement je n'en ai pas forcément besoin puisque l'affichage ultérieur de mes dates se fera dans un tableau et tout en chiffre.

    De plus, mon problème intervient principalement sur la saisie (et ce problème fr-->mysql), et impossible de faire des select, puisque j'ai besoin des minutes par exemple, et que ça ferait beaucoup trop de select (60 pour les minutes )et m'empecherait en + de présaisir la date/heure actuelle qui est indicative pour l'utilisateur.

    Merci beaucoup pour ta réponse en tout cas je garde ton script il me servira pour une autre partie du formulaire .

  4. #4
    Membre régulier Avatar de Rodrick
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 92
    Points : 91
    Points
    91
    Par défaut
    Lorsque l'utilisateur a rentré la date de la forme : jj/mm/aaaa
    Tu peux la spliter avec la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $split = split("/",$date);
    Ensuite tu récupére les différentes informations :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $j=$split[0];
    $m=$split[1];
    $a=$split[2];
    Et enfin tu enregistre la date dans ta base de données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dateang = $a . '-' . $m . '-' . $j;
    Tu fais ensuite de même pour l'heure.

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Problème 1 :
    @Rodrick :
    Split n'est pas suffisant car votre utilisation peut entraîner des disfonctionnements : des contrôles sont nécessaires.

    Une solution serait l'emploi d'expressions régulières pour un champ demandant une date/heure en une fois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function datetimefr2en($date) {
        $ret = FALSE;
        if (preg_match('#([0-9]{2})([/-])([0-9]{2})\2([0-9]{4})\s+([0-9]{2}):([0-9]{2})(:[0-9]{2})?#D', $date, $m) && checkdate($m[3], $m[1], $m[4]) && $m[5] >= 0 && $m[5] < 24 && $m[6] >= 0 && $m[6] < 60 && (!isset($m[7]) || ($m[7] >= 0 && $m[7] < 60))) {
            $ret = $m[3] . '-' . $m[1] . '-' . $m[4] . ' ' . $m[5] . ':' . $m[6] . (isset($m[7]) ? $m[7] : ':00');
        }
        return $ret;
    }
    Vous pouvez également décomposer les différents éléments de la date en différents champs et effectuer des tests sembables.

    Voir aussi la fonction MySQL STR_TO_DATE(chaîne, format).

    Problème 2 :
    La fonction MySQL DATEDIFF(date1, date2) retourne le nombre de jours séparant deux dates, TIMEDIFF(expr1, expr2) calcul un écart sur les parties TIME et enfin TIMESTAMPDIFF(unité, expr1, expr2) permet de faire des différences de dates selon l'unité que vous avez spécifié.

  6. #6
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 25
    Points : 5
    Points
    5
    Par défaut
    Merci merci.

    J'ai pas encore tout saisi mais ça devient un peu plus clair, notament la verif des entrées pour la date.

    Bon j'essaye d'utiliser ça et je reviens vers vous.

    Merci encore

  7. #7
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 25
    Points : 5
    Points
    5
    Par défaut
    Je suis content.

    J'ai resolu et compris la tranformation des dates dans les 2 sens ça marche tout bien nickel .

    Je vais essayer de comprendre et de mettre en place le contrôle suggéré un peu plus haut...

    Je vais me pencher sur le calcul de durée et je reviendrais expliquer et detailler ma methode quand tout sera fini.

    Merci d'avance.

    Je re

Discussions similaires

  1. [MySQL] Script PHP + Table MySQL (comparaison de date)
    Par laztog dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 16/06/2014, 18h22
  2. Problème de lien sur date entre Access et MySQL-4.1
    Par michou42 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 05/04/2005, 00h31
  3. Réponses: 8
    Dernier message: 05/02/2005, 17h38
  4. [date] conversion d'une date et compatibilité access
    Par WriteLN dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 10/01/2005, 15h03
  5. [Date] Conversion en millisecondes et formattage
    Par olivangel dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 30/09/2004, 11h49

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