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 :

Changer le format d'une donnée date [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 13
    Par défaut Changer le format d'une donnée date
    Bonjour,

    Alors je vous explique ce qu'il ce passe.
    Donc l'utilisateur importe un fichier .csv(un format excel, voir ci dessous).

    Ensuite toutes les données renseignées sont importées dans la bdd.

    Le problème est que j'ai une date à importer, je ne peux pas changer le format directement sur excel car le .csv ne le permet pas, la seule solution est donc de le faire par le code et je n'ai pas trouvé de solution.

    La date du .csv est sous forme jj/mm/aaaa et mysql ne comprend que aaaa-mm-jj.

    Voici mon code ci dessous:
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
     
    <div id='contenu'>
    	<br><br>
     
    	<form method="post" enctype="multipart/form-data">
    		<table width="628" border="0" align="center" cellpadding="5" cellspacing="0" bgcolor="#eeeeee">
    			<tr>
    				<td width="500"><font size=3><b>Selectionner votre fichier *.csv :</b></font></td>
    				<td width="244" align="center"><input type="file" name="userfile" value="userfile"></td>
    				<td width="137" align="center"><input type="submit" value="Envoyer" name="envoyer"></td>
    			</tr>
    		</table>
    	</form>
     
    <!--récupération en php-->
     
    <?php
    if(isset($_POST['envoyer']))
    {
     
    	require_once('connect.php');
     
    	//=========================
    	// Traitement des donnees
    	//=========================
     
    	//recupere le nom du fichier indiqué par l'user
    	$fichier=$_FILES["userfile"]["name"];
     
    	// ouverture du fichier en lecture
    	if ($fichier)
    	{
    	//ouverture du fichier temporaire
    		$fp = fopen ($_FILES["userfile"]["tmp_name"], "r");
    	}
    	else
    	{
    	// fichier inconnu
    		echo '<p align="center" >- Importation échouée -</p>';
    		echo '<p align="center" ><B>Désolé, mais vous n\'avez pas spécifié de chemin valide ...</B></p>';
    		exit();
    	}
     
    	// declaration de la variable "cpt" qui permettra de compter le nombre d'enregistrement réalisé
    	$cpt=0;
    	echo '<p align="center">- Importation Réussie -</p>';
     
    	// importation
    	while (!feof($fp))
    	{
    		$ligne = fgets($fp,4096);
    	// on crée un tableau des élements séparés par des points virgule
    		$liste = explode(";",$ligne);
    	// premier élément
    		$liste[0] = ( isset($liste[0]) ) ? $liste[0] : Null;
    		$liste[1] = ( isset($liste[1]) ) ? $liste[1] : Null;
    		$liste[2] = ( isset($liste[2]) ) ? $liste[2] : Null;
    		$liste[3] = ( isset($liste[3]) ) ? $liste[3] : Null;
    		$liste[4] = ( isset($liste[4]) ) ? $liste[4] : Null;
    		$liste[5] = ( isset($liste[5]) ) ? $liste[5] : Null;
    		$liste[6] = ( isset($liste[6]) ) ? $liste[6] : Null;
    		$liste[7] = ( isset($liste[7]) ) ? $liste[7] : Null;
    		$liste[8] = ( isset($liste[8]) ) ? $liste[8] : Null;
    		$liste[9] = ( isset($liste[9]) ) ? $liste[9] : Null;
    		$liste[10] = ( isset($liste[10]) ) ? $liste[10] : Null;
     
    		$champs1=$liste[0];
    		$champs2=$liste[1];
    		$champs3=$liste[2];
    		$champs4=$liste[3];
    		$champs5=$liste[4];
    		$champs6=$liste[5];
    		$champs7=$liste[6];
    		$champs8=$liste[7];
    		$champs9=$liste[8];
    		$champs10=$liste[9];
    		$champs11=$liste[10];
     
    		if ($champs1!='')
    		{
    		// nouvel ajout, compteur incrémenté
    		$cpt++;
    		// requete et insertion ligne par ligne
    		// champs1 id en general dc on affecte pas de valeur
     
    		mysql_query("INSERT INTO ordredefabrication(DateDuJour, DateDebutFab, Ref, Essences, Clients, Chantiers, SemaineFinFab, Types, Temps, NomPoseurs, Dep, Ville) VALUES(CURRENT_DATE,'$champs1','$champs2','$champs3','$champs4','$champs5','$champs6','$champs7','$champs8','$champs9','$champs10','$champs11' )");
     
    		echo '<table width="800" border="1" align="center" cellpadding="0" cellspacing="0" bgcolor="#eeeeee">
    			<tr>
    				<td width="124">Eléments importés :</td>';
    				echo '<td width="361">'.$liste[0].'</td>';
    				echo '<td width="361">'.$liste[1].'</td>';
    				echo '<td width="361">'.$liste[2].'</td>';
    				echo '<td width="361">'.$liste[3].'</td>';
    				echo '<td width="361">'.$liste[4].'</td>';
    				echo '<td width="361">'.$liste[5].'</td>';
    				echo '<td width="361">'.$liste[6].'</td>';
    				echo '<td width="361">'.$liste[7].'</td>';
    				echo '<td width="361">'.$liste[8].'</td>';
    				echo '<td width="361">'.$liste[9].'</td>';
    				echo '<td width="361">'.$liste[10].'</td>
    			</tr>
    		</table>';
    		}
    	}
     
    	// fermeture du fichier
    	fclose($fp);
    	//on supprime la derniere car elle est vide
     
     
    	//==================
    	//
     
    echo '<br><br>Nombre de valeurs nouvellement enregistrées: <b>'.$cpt.'</b>.<br><br>';	
    }
     
    ?>
    </div>

  2. #2
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    il y a deux solutions,
    1/ soit tu dupliques ton fichier puis tu édites (sed/awk) dans le shell et zou "LOAD DATA INTO FILE..." et c'est ultra rapide.

    2/ soit tu passes en php en lisant le fichier via fgetcsv tu fais tes traitements dans le tableau issu de fgetcsv (attention lecture ligne par ligne). Pour les dates, il y a DateTime(). Habituellement j'utilise un ptit wrapper comme suis

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function createDateTime($time, $expectedFormat="dd/mm/aaaa"){
       $tmp = DateTime::createFromFormat($expectedFormat,$time);
       if ( $tmp === null ){
          // si le format attendu n'est pas trouvé, tenter la divination.
          $tmp = new DateTime($time);
        }
    //    if ( $tmp === null ){
    //       throw new Exception("echec lecture de la date");
    //    }
        return $tmp;
    }


    ensuite ton objet DateTime() se formate comme on veut !
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $x = createDateTime('25/12/2013');
    $x->format('Y-m-d H:i:s');

  3. #3
    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
    Tu peux aussi importer tel quel dans une colonne temporaire CHAR() puis faire la conversion dans une colonne DATETIME avec la fonction MYSQL STR_TO_DATE()
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE tatable SET colonne_datetime = STR_TO_DATE(colonne_char, '%d/%m/%Y')
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    Sabotage a raison, le STR_TO_DATE s'utilise aussi directement dans INSERT.

    https://dev.mysql.com/doc/refman/5.5...functions.html

    d'expérience personnelle; la méthode la plus rapide que j'ai trouvé c'est de lire le CSV en php, de le transformer en php, pondre un temporaire en php, de charger charger le temporaire via un load data into file... mais faut avoir des problèmes de perf pour écrire tout le code correspondant.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 13
    Par défaut
    Ça fonctionne enfin !
    Merci à vous.

    J'ai donc remplacé
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO ordredefabrication(..., DateDebutFab, ...) VALUES(...,'$champs1',...)
    par
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO ordredefabrication(..., DateDebutFab, ...) VALUES(...,STR_TO_DATE('$champs1', '%d/%m/%Y'),...)
    et celà fonctionne parfaitement.

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

Discussions similaires

  1. Changer le format d'une donnée
    Par jive dans le forum Powerbuilder
    Réponses: 2
    Dernier message: 17/10/2007, 15h58
  2. changer le format d'une date
    Par ecirb dans le forum VBScript
    Réponses: 1
    Dernier message: 04/04/2007, 08h25
  3. [XSLT] changer le format d'une date
    Par ami_in55 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 26/03/2007, 09h33
  4. [Dates] changer le format d'une date.
    Par maraly dans le forum Langage
    Réponses: 3
    Dernier message: 24/01/2007, 16h17
  5. commant changer le format d'une date?
    Par tribaleur dans le forum ASP
    Réponses: 5
    Dernier message: 02/06/2006, 07h55

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