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

Langage PHP Discussion :

mise au format SQL d'une date


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut mise au format SQL d'une date
    Bonjour,

    je récupère des dates dans ce format : MMM-DD, YYYY (MMM in letters). Je souhaite les enregistrer dans une BDD MySQL, donc d'abord, il faut les mettre au format YYYY-MM-DD HH:MM:SS. Je fais donc une fonction PHP pour les convertir, mais erreur dont je ne trouve pas la cause :
    Code php : 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
     function convert_date($olddate) {
        //to convert month from letters to figures
            function convert_month_letters_to_figures($Month_Letter) {
                switch($Month_Letter) {
                    case 'Jan' :$month=1; break;
                    case 'Feb' :$month=2; break;
                    case 'Mar' :$month=3; break;
                    case 'Apr' :$month=4; break;
                    case 'May' :$month=5; break;
                    case 'Jun' :$month=6; break;
                    case 'Jul' :$month=7; break;
                    case 'Aug' :$month=8; break;
                    case 'Sep' :$month=9; break;
                    case 'Oct' :$month=10; break;
                    case 'Nov' :$month=11; break;
                    case 'Dec' :$month=12; break;
                }
                return($month);
            }
     
            list($mmdd,$year)=explode(',',$olddate);
    ...
    }

    Notice: Undefined offset: 1 in C:\wamp64\www\ticket\classes\Ticket.php on line 21
    Merci de m'aider

  2. #2
    Membre chevronné Avatar de ma5t3r
    Homme Profil pro
    Développeur freelance
    Inscrit en
    Mai 2015
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mai 2015
    Messages : 320
    Par défaut
    Salut,

    En considérant que la chaîne passée en paramètre est au bon format.
    A toi de traiter les éventuelles erreurs possibles.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
        function get_date_sql($date = 'Jan-11, 2019') {
            $months_text = array ('', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
            $first = explode(',', $date);
            $mj = explode('-', $first[0]);
     
            $my_date = new DateTime();
            $month = array_search($mj[0], $months_text);
            $my_date->setDate($first[1], $month, $mj[1]);
     
            return $my_date->format('Y-m-d H:i:s');
        }

  3. #3
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Merci pour ta réponse. Ton code est plus concis que le mien et semble répondre à mon besoin. Mais en voulant l'utiliser, j'ai ce message d'erreur :
    Fatal error: Uncaught Error: Class 'classes\Ticket\DateTime' not found in C:\wamp64\www\ticket\classes\Ticket.php on line 168
    Y a quelque chose à faire pour utiliser la classe DateTime ?

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    salut

    soit tu remets new DateTime() sur l'espace de nom global : new \DateTime(),
    soit tu déclares ta dépendance dans l'en-tête avec use DateTime; et comme ça tu pourras faire directement new DateTime()

  5. #5
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    sincèrement, depuis le temps laurentSc, tu pourrais quand même faire un effort mon vieux (surtout pour ce qui est des dates, PHP fournit tout ce qu'il faut nativement) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $date = DateTime::createFromFormat('M-d, Y', 'Jan-11, 2019');
    echo $date->format('Y-m-d'); // 2019-01-11
    Faut juste aller potasser la doc

  6. #6
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Ca paraît simple et pourtant
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function get_date_sql($date = 'Jan-11, 2019') {
            $months_text = array ('', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
            $first = explode(',', $date);
            $mj = explode('-', $first[0]);
     
            //$my_date = new DateTime();
            $my_date = DateTime::createFromFormat('M-d, Y', $date);
    //echo $my_date->format('Y-m-d'); // 2019-01-11
            $month = array_search($mj[0], $months_text);
            $my_date->setDate($first[1], $month, $mj[1]);
     
            return $my_date->format('Y-m-d H:i:s');
        }
    donne
    Fatal error: Uncaught Error: Call to a member function setDate() on bool in C:\wamp64\www\ticket\classes\Ticket.php on line 10

  7. #7
    Membre chevronné Avatar de ma5t3r
    Homme Profil pro
    Développeur freelance
    Inscrit en
    Mai 2015
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mai 2015
    Messages : 320
    Par défaut
    OOPS !
    Pourquoi faire simple quand on peut faire compliqué ?

    C'est le format MMM-DD, YYYY du départ qui m'a induit en erreur.
    Pourtant, je me suis posé la question

  8. #8
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    sincèrement, depuis le temps laurentSc, tu pourrais quand même faire un effort mon vieux (surtout pour ce qui est des dates, PHP fournit tout ce qu'il faut nativement) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $date = DateTime::createFromFormat('M-d, Y', 'Jan-11, 2019');
    echo $date->format('Y-m-d'); // 2019-01-11
    Faut juste aller potasser la doc
    Attention, il me semble que ça ne fonctionne qu'avec les mois en anglais. Si il veut les abbréviations en français, il va falloir le faire à la main.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

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

Discussions similaires

  1. [MySQL] comment rechercher une date au format datetime avec une date au format date
    Par Menoly dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 15/06/2007, 10h14
  2. Réponses: 13
    Dernier message: 27/12/2006, 17h52
  3. [T-SQL] insérer une date et une heure ?
    Par ionix dans le forum Adaptive Server Enterprise
    Réponses: 5
    Dernier message: 10/11/2006, 15h11
  4. Mise en forme conditionnelle pour une date
    Par Michel DELAVAL dans le forum Access
    Réponses: 4
    Dernier message: 03/10/2006, 21h31
  5. Manipuler le format retourné pour une date.
    Par BlackMinou dans le forum Oracle
    Réponses: 3
    Dernier message: 05/04/2006, 18h01

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