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 française en format US [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé Avatar de fazpedro
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 506
    Par défaut Date française en format US
    Bonjour,

    je récupère depuis un formulaire des dates en français et je souhaite les remettre au format SQL (YYYY-mm-dd), afin d'interroger ma base :
    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
    20
    21
    22
    23
    24
     
    // on récupère les dates du formulaire
    $date_depart=mysql_real_escape_string($_POST['date1']);
    $date_fin=mysql_real_escape_string($_POST['date3']);
    // pour la requête au format US
    setlocale (LC_TIME, 'us_US.UTF8');
    $date_depart_req = strftime("%Y-%m-%d",strtotime("$date_depart"));
    $date_fin_req = strftime("%Y-%m-%d",strtotime("$date_fin"));
    //On remet les dates au format français
    setlocale (LC_TIME, 'fr_FR.UTF8');
    $date_vue_depart = strftime("%A %d %B %Y",strtotime("$date_depart"));
    $date_vue_fin = strftime("%A %d %B %Y",strtotime("$date_fin"));
     
    	echo '$date_depart :'.$date_depart;
    	echo '<br />';
    	echo '$date_fin :'.$date_fin;
    	echo '<br />';
    	echo '$date_depart_req :'.$date_depart_req;
    	echo '<br />';
    	echo '$date_fin_req :'.$date_fin_req;
    	echo '<br />';
    	echo '$date_vue_depart :'.$date_vue_depart;
    	echo '<br />';
    	echo '$date_vue_fin :'.$date_vue_fin;
    Voici le résultat (incorrect bien sûr) :
    $date_depart :Jeudi 03 Novembre 2011
    $date_fin :Mardi 22 Novembre 2011
    $date_depart_req :1970-01-01
    $date_fin_req :1970-01-01
    $date_vue_depart :jeudi 01 janvier 1970
    $date_vue_fin :jeudi 01 janvier 1970
    
    Merci !

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Tu peux aussi soumettre tes $date_depart et $date_fin à MySQL et utiliser dans la requête la fonction STR_TO_DATE, à condition toutefois que toutes les dates soient au même format.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre éclairé Avatar de fazpedro
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 506
    Par défaut
    j'ai indiqué :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $date_depart_req = STR_TO_DATE('$date_depart', GET_FORMAT(DATE, 'USA'));
    $date_fin_req = STR_TO_DATE('$date_fin', GET_FORMAT(DATE, 'USA'));
    et voici l'affichage :
    Call to undefined function STR_TO_DATE()

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    c'est des fonctions SQL pas PHP ...

  5. #5
    Membre éclairé Avatar de fazpedro
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 506
    Par défaut
    A la place de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $select2 = "SELECT * FROM evenement WHERE date_ev BETWEEN '$date_depart_req' AND '$date_fin_req' AND type_evenement='".mysql_real_escape_string($_POST['evenement1'])."' ORDER BY date_ev ASC"
    ;

    j'ai mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $select2 = "SELECT * FROM evenement WHERE date_ev BETWEEN 'STR_TO_DATE('$date_depart', GET_FORMAT(DATE, 'USA'))' AND 'STR_TO_DATE('$date_fin', GET_FORMAT(DATE, 'USA'))' AND type_evenement='".mysql_real_escape_string($_POST['evenement1'])."' ORDER BY date_ev ASC";
    Voici le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $date_depart :Jeudi 03 Novembre 2011
    $date_fin :Dimanche 20 Novembre 2011
    $date_depart_req :
    $date_fin_req :
    $date_vue_depart :jeudi 01 janvier 1970
    $date_vue_fin :jeudi 01 janvier 1970
    Du : Jeudi 01 Janvier 1970   Au : Jeudi 01 Janvier 1970
    Erreur : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Jeudi 03 Novembre 2011', GET_FORMAT(DATE, 'USA'))' AND 'STR_TO_DATE('Dimanche 20' at line 1
    Désolé, je suis un peu long à la détente...

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Tu as mal compris la fonction STR_TO_DATE !
    Les arguments sont :
    - la chaîne de caractères censée être une date ;
    - le format actuel de la chaîne de caractères.

    Toi tu as donné en second argument le format que tu souhaites !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 23
    Par défaut
    J'utilise ça quand j'en ai besoin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function changedateusfr($dateus) 
    { 
    $datefr=$dateus{8}.$dateus{9}."-".$dateus{5}.$dateus{6}."-".$dateus{0}.$dateus{1}.$dateus{2}.$dateus{3}; 
    return $datefr; 
    } 
     
    function changedatefrus($datefr) 
    { 
    $dateus=$datefr{6}.$datefr{7}.$datefr{8}.$datefr{9}."-".$datefr{3}.$datefr{4}."-".$datefr{0}.$datefr{1}; 
    return $dateus; 
    } 
     
    		$datefr=changedateusfr($date);
    et inversement.

  8. #8
    Membre éclairé Avatar de fazpedro
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 506
    Par défaut
    En fait le problème venait de mon formulaire, car il transmettait une date mais au format 'texte' et non 'date' ! :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $date_depart2 = date('Y-m-d', strtotime($date_depart2.' +1 days'));	
    		$date_vue_depart = strftime("%A %d %B %Y",strtotime("$date_depart2"));
    		$jour_vue = ucwords(strtolower($date_vue_depart));
    		echo '<option value="'.$jour_vue.'">'.$jour_vue.'</option>';
    et j'ai remplacé par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $date_depart2 = date('Y-m-d', strtotime($date_depart2.' +1 days'));	
    		$date_vue_depart = strftime("%A %d %B %Y",strtotime("$date_depart2"));
    		$jour_vue = ucwords(strtolower($date_vue_depart));
    		echo '<option value="'.$date_depart2.'">'.$jour_vue.'</option>';
    et là cela fonctionne avec le code de traitement suivant :
    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
    $date_depart=mysql_real_escape_string($_POST['date1']);		// on récupère les dates du formulaire
    	$date_fin=mysql_real_escape_string($_POST['date3']);
    setlocale (LC_TIME, 'fr_FR.UTF8');										//On remet les dates au format français
    $date_vue_depart = strftime("%A %d %B %Y",strtotime("$date_depart"));	// Affichage de la date de départ et de fin en français
    $date_vue_fin = strftime("%A %d %B %Y",strtotime("$date_fin"));	// Affichage de la date de départ et de fin en français
    echo '<p />';
    echo '<br>';
    echo '<h3>'.mysql_real_escape_string($_POST['evenement1']).'</h3>';
    echo '<br>'.'</br>';
    echo 'Du :  '.'<b>'.ucwords(strtolower($date_vue_depart)).'&nbsp;'.'&nbsp;'.'&nbsp;'.'</b>';
    echo 'Au : '.'<b>'.ucwords(strtolower($date_vue_fin)).'</b>';
    echo '<br>'.'</br>';
    $sql = connect_sql();
    // on écrit la requête
    mysql_query("SET NAMES utf8");
    $select2 = "SELECT * FROM evenement WHERE date_ev BETWEEN '$date_depart' AND '$date_fin' AND type_evenement='".mysql_real_escape_string($_POST['evenement1'])."' ORDER BY date_ev ASC";
    Désolé du dérangement !

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

Discussions similaires

  1. [PHP 5.3] convertir une date complète française en format date mysql
    Par flora806 dans le forum Langage
    Réponses: 5
    Dernier message: 28/08/2014, 15h06
  2. Comparaison de 2 dates dans des formats différents
    Par frdek dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/02/2005, 15h05
  3. Réponses: 8
    Dernier message: 05/02/2005, 16h38
  4. [Dates] Calendrier sous format 20000101
    Par nunor dans le forum Langage
    Réponses: 9
    Dernier message: 10/11/2004, 00h03
  5. [date] Comparer deux formats différents
    Par terziann dans le forum Requêtes
    Réponses: 17
    Dernier message: 21/07/2003, 15h21

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