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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 5
    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
    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
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 5
    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
    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 : 40
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    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
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 5
    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
    Par défaut
    date.timezone concerne seulement le fuseau horaire.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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