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 :

php et dates


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 5
    Points : 2
    Points
    2
    Par défaut php et dates
    Salut à vous !

    Je suis en train de faire une page qui reçoit un csv, le lit pour s'assurer qu'il n'y a pas de fautes, puis le rentre dans une base de donnée sql.

    Mon problème est le suivant quand je lui donne la date 01/15/2020, il lit "le 15 jour du mois de Janvier de l'année 2020" or moi mes dates sont standards soit "15/01/2020"
    J'ai beau joué avec date-default-time-zone ou setlocale, impossible de faire comprendre a php que ma date est "jj/mm/aaaa" et que j'aimerais qu'il me réponde "aaaa-mm-jj hh:mm:ss" que je pourrai envoyer tel quel dans mysql (j'imagine en tout cas, j'y suis pas encore)

    Pour l'instant vous l'avez compris je lui donne : "jj/mm/aaaa" et il me répond "aaaa-JJ-MM hh:mm:ss" => donc naturellement quand je parle du 14e jour il comprend le 14e mois donc plante ...

    j'ai aussi trouvé sur le net ceci : define('MYSQL_DATETIME_FORMAT','Y-m-d H:i:s'); écrit comme ca mon code inverse (toujours) jour et mois, si moi j'inverse les 2 (volontairement dans la macro) il répond exactement ce que j'attends mais plante quand meme sur le 14e jour qu'il considère comme le 14e mois quand j'écrit 14/01/2020...

    Donc ! ya qqch que je ne vois pas je comprends bien qu'il y a un soucis entre écriture américaine et française, je comprends bien qu'avec la macro je lui dit ce que j'attends en sortie mais a aucun moment je ne lui parle de ce que je lui donne en entrée, et de plus j'ai lu sur le net que ce format (année-jour-mois h:m:s) est bien le format de mysql néanmoins ma base de donnée, moi, est écrite sous la forme année-mois-jour ...
    Si qqn pouvait m'expliquer, j'en serais très heureux.

    En C avec un char* et un compteur j'inverserai le mois et le jour en entrée et ce serait plié en 2 minutes mais en PHP j'ai du louper un épisode qqpart, je vois pas la logique là ou plutôt la solution ...

    Merci d'avance a vous.
    Cordialement
    Bobby La Courgette

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Utilise la classe datetime :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $objDate = New Datetime('01/15/2020');
    echo $objDate->format('Y-m-d');
    ou si ton serveur est antique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo date('Y-m-d',strtotime('01/15/2020'));
    Le format mysql est bien année-mois-jour
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    non ça ne change rien ce qui est normal tu écris :
    ... ->format('Y-m-d')
    et moi ... ->format(MACRO) avec MACRO='Y-m-d H:i:s'

    j'ai essayé la seconde solution malgré tout mais ca donne la même chose :

    mon code :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    <?php
     
    function error($file_name)
    {
    $fd = fopen($file_name, "r");
    $line = fgetcsv($fd, 200, ";");
     
    if ($line == ['N° Facture', 'Date Facture', 'N° Client', 'N° Rép', 'Référence', 'Désignation', 'Quantité', 'Montant Ligne'])
    	{
    	$nb_line = 1;
    	while (($line = fgetcsv($fd, 300, ";")) != FALSE)
    		{
    		if (is_numeric($line[0]) == 1 && is_numeric($line[2]) == 1 && is_numeric($line[3]) == 1 && is_numeric($line[6]) == 1 && is_numeric($line[7]) == 1)
    			{
    			$date = new DateTime($line[1]);
    			echo 'Date du csv : ' . $line[1] . '<br />Date de mysql : ' . $date->format('Y-m-d') . '<br /><br />'; /* $line[1] apparaît comme 12/05/2000 (12 mai 2000 par exemple) et $date->format('Y-m-d') apparaît comme le 5 décembre 2000.*/
    			}
    		else
    			{
    			echo '<br />Erreur ligne ' . $nb_line . ' (sans prendre en compte la ligne des titres de colonne).<br /> L\'un des paramètres (N° de Facture, N° Client, N° Rép, Quantité ou Montant Ligne) n\'est pas un nombre et devrait l\'être.<br /> Veuillez modifer.';
    			return (1);
    			}
    		$nb_line++;
    		}
    	return (0);
    	}
    else
    	{
    	echo '<strong>La première ligne ne correspond pas aux colonnes attendues, soit : <br /></strong>';
    	echo '<strong>N° Facture;Date Facture;N° Client;N° Rép;Référence;Désignation;Quantité;Montant Ligne</strong><br />';
    	return (1);
    	}
    }
    ?>
    mon chromium dit :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    Date du csv : 01/09/2015
    Date de mysql : 2015-01-09
     
     
     
     
    Date du csv : 04/09/2015
    Date de mysql : 2015-04-09
     
     
     
     
    Date du csv : 10/09/2015
    Date de mysql : 2015-10-09
     
     
     
     
    Date du csv : 10/09/2015
    Date de mysql : 2015-10-09
     
     
     
     
    Date du csv : 11/09/2015
    Date de mysql : 2015-11-09
     
     
     
     
    Date du csv : 11/09/2015
    Date de mysql : 2015-11-09
     
     
     
     
    Date du csv : 11/09/2015
    Date de mysql : 2015-11-09
     
     
     
     
     
    Fatal error: Uncaught Exception: DateTime::__construct(): Failed to parse time string (14/09/2015) at position 0 (1): Unexpected character in /var/www/html/import_order/error.php:18 Stack trace: #0 /var/www/html/import_order/error.php(18): DateTime->__construct('14/09/2015') #1 /var/www/html/import_order/mysql_action.php(14): error('tab_vente_php.c...') #2 {main} thrown in /var/www/html/import_order/error.php on line 18
    la ligne d'erreur à la fin correspond au fait que la date est qqch comme "15/10/2000" que lui comprend comme "10/15/2000", d'où l'erreur
    merci pour ton intérêt a mon soucis ^^ d'ici peu de temps j'achète une corde et un tabouret)

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Pardon j'avais mal compris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $objDate = date_create_from_format('m/d/Y', '01/15/2020');
    echo $objDate->format('Y-m-d');
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    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 : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Si le format présent dans le CSV est fixe, tu peux utiliser DateTime::createFromFormat (ou date_create_from_format, c'est l'alias procédural de la même fonction) pour préciser le format en entrée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $date = date_create_from_format('d/m/Y', $line[1]);
    echo 'Date du csv : ' . $line[1] . '<br />Date de mysql : ' . $date->format('Y-m-d') . '<br /><br />';
    EDIT : grillée
    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]

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    ok super !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!



    ca fait un bon moment que je suis dessus et alors expliquez moi un peu car j'ai trouvé plus ou moins personne parlant de data_create_from_format, je commençais à penser que j'avais un soucis dans le php.ini ou qqch comme ça et que mon php ne régissait pas comme celui des autres ... en fait quoi qu'il arrive php lit en version américaine même si j'ai changé le Date.time dans php.ini par Europe/Paris ?

    et donc dans notre cas petits européens que nous sommes je dois toujours utiliser data_create_from_format ? et j'imagine que quand je vais rentrer tout ça en base de donnée mysql je vais encore utiliser $date->format pour le faire rentrer avec la bonne présentation ?

    Merci en tout vous m'enlever un épine du pied que dis-je un arbre !!

    Merci a vous

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    date.timezone concerne seulement le fuseau horaire.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  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 : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Il est possible que configurer une locale au niveau du serveur ait un impact. Mais c'est loin d'être garanti. D'ailleurs DateTime::format n'utilise les locales c'est clairement écrit dans la Doc :
    Cette méthode n'utilise pas les locales. Tous les affichages seront en anglais.
    Donc n'hésites pas à travailler avec des formats fixes, à coup de createFromFormat et Format.
    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]

  9. #9
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 382
    Points : 10 410
    Points
    10 410
    Par défaut
    Citation Envoyé par Bobby_la_Courgette
    et donc dans notre cas petits européens...
    Plus généralement, on utilise le format anglais pour le code interne (fonctions sur les dates, enregistrement en bdd...) et on converti en local uniquement pour l'affichage.

  10. #10
    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 : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Personnellement, je travaille en interne avec des extraits du format ISO : "yyyy-mm-dd" et "hh:mi:ss" (ou des variantes), qui ont l'avantage d'être triables et standard
    @ABCIWEB : quand tu dis "format anglais" je suppose que c'est de ce genre de format que tu parles et pas du format tordu mm/dd/yyyy.
    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]

  11. #11
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Excellent pseudo en tout cas.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

Discussions similaires

  1. Problème PHP et date
    Par Luxor dans le forum Langage
    Réponses: 1
    Dernier message: 01/11/2012, 21h40
  2. [Oracle] Problème avec les dates - Oracle et Php
    Par -Fly- dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 30/05/2011, 10h51
  3. probléme avec une date/string dans un CommandText
    Par critok dans le forum Bases de données
    Réponses: 5
    Dernier message: 09/02/2005, 15h30
  4. [SQL] problème avec les date et les group By
    Par Stef784ever dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/11/2004, 09h18
  5. Interbase - dbExpress -> problème avec les dates
    Par marghett dans le forum Bases de données
    Réponses: 4
    Dernier message: 02/07/2004, 03h55

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