Conversion de date

  • Auteur de la discussion Le_Tolier
  • Date de début

Le_Tolier

Grand Maître
bonjour voila j ai une date sous ce format : MMJJ-HH:MM et je voudrais la mettre a ce format : AAAA-MM-JJ HH:MM:SS est ce que quelqu un a aurait une fonction pour faire ca ? ( en php) ?

merci :merci:
 

Country

Nouveau membre
Voila une "petite" fonction qui te permettera de faire sa (trouvé sur Nexen.net):
[cpp]<?
function date2timestamp($date , $format){
// Paramètres :
// $date : date formattée comme renvoie date()
// $format : format de la date similire au paramètre de date()
/* exemple : date2timestamp("2001-07-11 16:00:00", "Y-m-d h:i:s");
retourne 994860000
*/


//jour
$d = "([0-3][0-9])";
$j = "([1-3]?[0-9])";
// mois
$m = "(0[0-9]|1[0-2])";
$n = "([0-9]|1[0-2])";
$F =
"(January|February|March|April|May|June|July|August|September|October|November|December)";
$M = "(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)";
//annee
$Y = "([0-9]{4, 4})";
$y = "([0-9]{2, 2})";
//heures
$g = "([1]?[0-9])";
$G = "([0-2]?[0-9])";
$h = "([01][0-9])";
$H = "([0-2][0-9])";
//minutes
$i = "([0-5][0-9])";
//secondes
$s = "([0-5][0-9])";

$z = "([0-3]?[0-9]?[0-9])";
$I = "[01]" ;

$lesmois = array('January'=>1, 'February'=>2, 'March'=>3,
'April'=>4, 'May'=>5, 'June'=>6,
'July'=>7, 'August'=>8, 'September'=>9, 'October'=>10,
'November'=>11, 'December'=>12,
'Jan'=>1, 'Feb'=>2, 'Mar'=>3, 'Apr'=>4, 'May'=>5, 'Jun'=>6,
'Jul'=>7, 'Aug'=>8, 'Sep'=>9,
'Oct'=>10, 'Nov'=>11, 'Dec'=>12);

$ok = array('M', 'F', 'I', 'd', 'j', 'm', 'n', 'y', 'Y', 'g', 'G', 'h', 'H',
'i', 's', 'z');
$nok = array('a', 'A', 'L', 'B', 'D', 'S', 't', 'T', 'w', 'Z');

$form_m = preg_replace("/([\(\)\[\]\{\}\?\.\*\?\$\^\/\\\\])/", "\\\\$1",
$format);
$len = strlen($form_m);
$form="";
for($count=0;$count<$len;$count++)
{
$chr = substr($form_m, $count, 1);
if ($chr == '\\' || substr($form, -1, 1) == '\\')
{
$form .= substr($form_m, $count, 2);
$count++;
continue;
}
if (in_array($chr, $ok))
$form .= $$chr;
else
if (in_array($chr, $nok))
$form .= ".+";
else
if ($chr == 'r')
$form .= ", $d $M $Y $H:$i:$s [-+][0-9]{4, 4}";
else
$form .= $chr;
}

$format = preg_replace("/(^|[^\\\\])(r)/", "$1, d M Y H:i:s", $format);
$form = preg_replace("/\\\\\\\\([a-zA-Z])/", "$1", $form);
preg_match("/$form/", $date, $reg);

$len = strlen($format);
$pos = 1;
$annee = $mois = $jour = 0;

for($count=0;$count<$len;$count++)
{
$chr = substr($format, $count, 1);
if ($chr == '\\')
{
$count++;
continue;
}
if ($chr == 'd' || $chr == 'j')
$jour = $reg[$pos++];
if ($chr == 'm' || $chr == 'n')
$mois = $reg[$pos++];
if ($chr == 'M' || $chr == 'F')
$mois = $lesmois[$reg[$pos++]];
if ($chr == 'y'|| $chr == 'Y')
$annee = $reg[$pos++];
if ($chr == 'g' || $chr == 'h'||$chr == 'G' || $chr == 'H')
$heure = $reg[$pos++];
if ($chr == 'i')
$min = $reg[$pos++];
if ($chr == 's' || $chr == 'z')
$sec = $reg[$pos++];
if ($chr == 'I')
$dst = $reg[$pos++];
}

if (!isset($heure))
$heure=0;
if (!isset($min))
$min=0;
if (!isset($sec))
$sec=0;
if (!isset($dst))
$dst=-1;
$timestamp = mktime($heure, $min, $sec, $mois, $jour, $annee, $dst);
return $timestamp;
}
// Exemple d'utilisation
$date = "0112-18:05";
echo "Format d'entrée: ".$date."<br>";
$date = date("Y-m-d H:i:s",date2timestamp($date,"md-H:i"));
echo "Format de sortie: ".$date."<br>";
?>[/cpp]

Evidement comme il n'y a pas d'année dans la date en entrée l'année donnée en sortie sera surement fausse.
 

Le_Tolier

Grand Maître
merci beaucoup sinon on peut faire comme ca aussi :

$str_date_non_formatee_src = $start_date;
$month = substr($str_date_non_formatee_src, 0, 2);
$jour = substr($str_date_non_formatee_src, 2, 2);
$heure = substr($str_date_non_formatee_src, 5, 2);
$minutes = substr($str_date_non_formatee_src, 8, 2);
$start_date = date("Y-m-d H:i:00", mktime($heure, $minutes, 0 , $month , $jour, date("Y")));

voila @+
 

benoit_

Habitué
moi j'ai des dates dans une table sql au format AAAA-MM-JJ. et je voudrais recuperer en php juste MM et JJ ...

ca doit etre tout bidon mais je trouva pas de solution ...
 

benoit_

Habitué
j'ai regarder avec to_date, c assez compliqué. en fait je m'en fiche un peu du format de la date, je veux juste recuperer une partie de la donnée (le jour le mois) dans ce cas ...
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 098
Messages
6 717 050
Membres
1 586 282
Dernier membre
Yannick3553
Partager cette page
Haut