OVH Cloud OVH Cloud

Pb Date

4 réponses
Avatar
Jaco
Bonjour,

Je trouve sur internet des tas de routines me permettant d'afficher une date
en jj/mm/aaaa à partir de aaaa-mm-jj de mysql.
Je désire faire l'inverse !
Je voudrais qu'une date saisie jj/mm/aaaa soit enregistrée par mysql comme
aaaa-mm-jj
A l'aide !
Merci.

4 réponses

Avatar
dmetzler
Cf documentation de ereg :

<?php
$date = "10/11/2005";
if (ereg ("([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})", $date, $regs)) {
echo "$regs[3]/$regs[2]/$regs[1]";
} else {
echo "Format de date invalide : $date";
}
?>
Avatar
CrazyCat
Jaco wrote:
Je voudrais qu'une date saisie jj/mm/aaaa soit enregistrée par mysql comme
aaaa-mm-jj


Tu peux utiliser la procédure suivante:

function date_php_sql($php_date) {
$temp = explode("/", $php_date);
$sql_date = $temp[2]."-".$temp[1]."-".$temp[0];
return $sql_date;
}

ou par une regexp (je ne sais pas lequel des deux est le plus optimisé):

function date_php_sql($php_date) {
$pattern = "/(d{2})/(d{2})/d{4})//";
$sql_date = preg_replace($pattern, "$3-$2-$1", $php_date);
return $sql_date;
}

L'avantage de la seconde est de faire une vérification sur les données
en même temps (retourne false si le format de date n'est pas correct).
--
Découvrez Original War: http://www.original-war.org
Humour: http://www.chatfou.com
Tchattez en liberté: http://www.crazy-irc.net

Avatar
Guillaume Bouchard
CrazyCat wrote:
$temp = explode("/", $php_date);
ou par une regexp (je ne sais pas lequel des deux est le plus optimisé):


J'aurais tandance à ne pas utiliser les preg pour si peu, c'est sortir
le bazooka à fragmentation subsonique pour pas grand chose.


$pattern = "/(d{2})/(d{2})/d{4})//";
$sql_date = preg_replace($pattern, "$3-$2-$1", $php_date);
L'avantage de la seconde est de faire une vérification sur les données
en même temps (retourne false si le format de date n'est pas correct).


Cf la doc.

""" preg_replace() returns an array if the subject parameter is an
array, or a string otherwise.

If matches are found, the new subject will be returned, otherwise
subject will be returned unchanged. """

À voir si avec checkdate cela ne permetrait pas de verifier l'intégrité
encore mieux.

function date_php_sql($date){
list($day,$month,$year) = explode('/',$date);
if ( checkdate($month,$day,$year)){
return $year.'-'.$month.'-'.$day;
} else {
die('Invalid date format');
}

Notont au passage le magnifique ordre des arguments de checkdate.

--
Guillaume.

Avatar
Frederic Rouchouze
"Jaco" a écrit dans le message de news:
d7hjr8$fg9$
Je voudrais qu'une date saisie jj/mm/aaaa soit enregistrée par mysql comme
aaaa-mm-jj


Le plus propre (à mon avis) : transformer ta date "jj/mm/aaaa" en timestamp
UNIX.

$annee=substr($date_mysql, 0, 4);
$mois=substr($date_mysql, 5, 2);
$jour=substr($date_mysql, 8, 2); // Ou bien avec des expressions
régulières si tu préfères

$timestamp=mktime(0, 0, 0, $mois, $jour, $annee);

Ensuite, tu peux très facilement manipuler le timestamp avec les fonctions
appropriées et, en particulier, générer une date "aaaa-mm-jj" :

$dateÚte('d/m/Y', $timestamp);

Si ça t'intéresse, j'ai toute une batterie de fonctions (pas encore une
classe propre) pour faire tout ça.
--
Frédéric Rouchouze
mailto: