Transformer un format de date au format mysql

Résolu/Fermé
Signaler
Messages postés
127
Date d'inscription
jeudi 4 juin 2009
Statut
Membre
Dernière intervention
21 mars 2014
-
Messages postés
127
Date d'inscription
jeudi 4 juin 2009
Statut
Membre
Dernière intervention
21 mars 2014
-
Bonjour à tous !

J'ai actuellement un problème au niveau de la programmation d'un mini site web en php qui communique avec une base de données.

En effet, j'importe, via le site web, un tableau au format csv dans ma base de données.
Ce tableau contient des colonnes avec des dates du type "JJ/MM/AAAA".
Premier obstacle, PHPMyadmin n'accepte au format "DATE" que celles qui sont sous la forme "AAAA-JJ-MM".

Donc, je me suis dit "Pas de problème, on met le "JJ/MM/AAAA" au format "TEXT".

Le problème en fait, est que j'aimerais pouvoir faire des opérations sur ces dates (Les comparer, décompter des jours ...).
Comme je ne pense pas que je pourrai comparer les dates au format "TEXT" grâce au PHP, j'aimerais savoir comment faire pour convertir mes dates de "JJ/MM/AAAA" à "AAAA-JJ-MM".

D'avance merci,
Cordialement
Momo

3 réponses

Bonjour

Pour convertir le "JJ/MM/AAAA" en "AAAA-JJ-MM", il suffit d'utiliser la fonction PHP substr pour 'découper' des tranches dans ta date initiale, puis de les ré-assembler dans l'ordre qui te convient.
Messages postés
613
Date d'inscription
dimanche 21 octobre 2007
Statut
Membre
Dernière intervention
22 juin 2009
46
le mieux serait de passer ta date en timestamp (entier) et de l'envoyer a phpmyadmin
ca te ferai gagner pas mal d'octet (4 conttre 10)
de plus mysql et php ont pas mal de fonctions de manipulation de timestamp et de date
(tu lui rentre une date il te donne le timestamp et vice versa)

extrait de http://dev.mysql.com/doc/refman/5.0/fr/date-and-time-functions.html
FROM_UNIXTIME(unix_timestamp)
Retourne une représentation de l'argument unix_timestamp sous la forme 'YYYY-MM-DD HH:MM:SS' ou YYYYMMDDHHMMSS, suivant si la fonction est utilisé dans un contexte numérique ou de chaîne.
mysql> SELECT FROM_UNIXTIME(875996580);
        -> '1997-10-04 22:23:00'
mysql> SELECT FROM_UNIXTIME(875996580) + 0;
        -> 19971004222300
Si format est donné, le résultat est formaté en fonction de la chaîne format. format peut contenir les mêmes options de format que celles utilisées par DATE_FORMAT() :
mysql> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(),
    ->                      '%Y %D %M %h:%i:%s %x');
        -> '2003 6th August 06:22:58 2003'

[...]
format :
Option 	Description
%% 	Un signe pourcentage littéral ‘%’.
%a 	Nom du jour de la semaine, en abrégé et en anglais (Sun..Sat)
%b 	Nom du mois, en abrégé et en anglais (Jan..Dec)
%c 	Mois, au format numérique (1..12)
%d 	Jour du mois, au format numérique (00..31)
%D 	Jour du mois, avec un suffixe anglais (1st, 2nd, 3rd, etc.)
%e 	Jour du mois, au format numérique (0..31)
%f 	Microsecondes (000000..999999)
%H 	Heure (00..23)
%h 	Heure (01..12)
%I 	Heure (01..12)
%i 	Minutes, au format numérique (00..59)
%j 	Jour de l'année (001..366)
%k 	Heure (0..23)
%l 	Heure (1..12)
%m 	Mois, au format numérique (01..12)
%M 	Nom du mois (January..December)
%p 	AM ou PM
%r 	Heures, au format 12 heures (hh:mm:ss [AP]M)
%s 	Secondes (00..59)
%S 	Secondes (00..59)
%T 	Heures, au format 24 heures (hh:mm:ss)
%U 	Numéro de la semaine (00..53), où Dimanche est le premier jour de la semaine
%u 	Numéro de la semaine (00..53), où Lundi est le premier jour de la semaine
%V 	Numéro de la semaine (01..53), où Dimanche est le premier jour de la semaine, utilisé avec '%X'
%v 	Numéro de la semaine (01..53), où Lundi est le premier jour de la semaine, utilisé avec '%x'
%W 	Nom du jour de la semaine (Sunday..Saturday)
%w 	Numéro du jour de la semaine (0=Sunday..6=Saturday)
%X 	Année, pour les semaines qui commencent le Dimanche, au format numérique, sur 4 chiffres, utilisé avec '%V'
%x 	Année, pour les semaines qui commencent le Lundi, au format numérique, sur 4 chiffres, utilisé avec '%v'
%y 	Année, au format numérique, sur 2 chiffres
%Y 	Année, au format numérique, sur 4 chiffres


extrait de https://www.php.net/manual/fr/function.mktime.php
Description
int mktime ([ int $hour= date("H") [, int $minute= date("i") [, int $second= date("s") [, int $month= date("n") [, int $day= date("j") [, int $year= date("Y") [, int $is_dst= -1 ]]]]]]] )

mktime() retourne un timestamp UNIX correspondant aux arguments fournis. Ce timestamp est un entier long, contenant le nombre de secondes entre le début de l'époque UNIX (1er Janvier 1970 00:00:00 GMT) et le temps spécifié.

Les arguments peuvent être omis, de droite à gauche, et tous les arguments manquants sont utilisés avec la valeur courante de l'heure et du jour.

engros, tu coupe ta chaine, tu la donnes a mktime, il te donne un entier, tu le stock dans ta bdd,
tu peux alors manipuler tes dates facilement, et les afficher avec FROM_UNIXTIME
Messages postés
127
Date d'inscription
jeudi 4 juin 2009
Statut
Membre
Dernière intervention
21 mars 2014
3
Merci Brachior et le père pour vos solutions mais j'ai une préférence pour celle de "le père" car beaucoup plus simple à comprendre ! ^^

Voici donc le code que j'obtiens grâce à ta méthode "le père":
$jour = substr($tableau[ats], 0, 2);
$mois = substr($tableau[ats], 3, 2);
$annee = substr($tableau[ats], 6, 4);
$date = "$annee"."-"."$mois"."-"."$jour";
printf("Date:\t%s<BR>",$date);


J'obtiens donc bien une date sous la forme AAAA-MM-JJ à la place du JJ/MM/AAAA de départ.

(mon $tableau[ats] est le résultat d'un mysql_fetch_array qui met le champ "ats" de ma BDD sous forme de tableau)

Je te remercie donc beaucoup pour cette aide !