[résolu]convertir une date

WRInaute occasionnel
Bonjour,

J'ai un problème avec une conversion de date:

Dans un champs d'une table de ma bdd, j' ai une date au format AAAA-MM-JJ HH:MM:SS et je dois la convertir en Thu, 01 Jan 1970 01:00:00 +0100

Ca n'a pas l'air d'être compliqué mais ca fait plusieurs heures que j'y travaille dessus.
J'ai essayé avec DATE_FORMAT de mysql, en le convertissant en timestamp mais a chaque fois, je bloque. :cry:
 
WRInaute accro
silverbeach a dit:
...ca fait plusieurs heures que j'y travaille dessus.
Tiens, sans savoir si des fonctions existent... En 2mn.

// Mise en forme de la date
Ta date est dans $date


$lettrejour = date('D', strtotime($date));
$tab = explode(" ",$date);
$jours = $tab[0];
$heures = $tab[1];
$tab2 = explode("-",$jours);
$a = $tab2[0];
$m = $tab2[1];
$j = $tab2[2];

if($m==1)$m='jan';
if($m==2)$m='feb';
if($m==3)$m='mar';
if($m==4)$m='apr';
if($m==5)$m='may';
if($m==6)$m='jun';
if($m==7)$m='jul';
if($m==8)$m='aug';
if($m==9)$m='sep';
if($m==10)$m='oct';
if($m==11)$m='nov';
if($m==12)$m='dec';

$date = $lettrejour.", ".$j." ".$m." ".$a." ".$heures." +0100";
:wink:
 
WRInaute accro
Ah ouais, mais la Rod, c'est crado comme code.

Tandis qu'avec une combinaison de mktime et strftime, il y a moyen d'obtenir un code optimisé et qui plus est portable à d'autres langues (via la locale).
 
WRInaute discret
Code:
$tab_mois=array("janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre");

$date_tmp=str_replace(array(" ",":"),array("-","-"),$product_date);
list($annee,$mois,$jour,$heure,$minute,$seconde)=split("[./-]",$date_tmp);

$new_date=$jour." ".$tab_mois[$mois]." ".$annee
 
WRInaute occasionnel
Merci Rod la Kox, ton script fonctionne, il y a juste quelques trucs à modifier pour que que ca fonctionne parfaitement.

Rod la Kox a dit:
silverbeach a dit:
...ca fait plusieurs heures que j'y travaille dessus.
Tiens, sans savoir si des fonctions existent... En 2mn.
J'ai vraiment passer quelques heures dessus: j'ai d'abord chercher dans la doc de mysql, essayé avec plusieurs fonctions. Puis comme ca ne fonctionnait pas, j'ai cherché dans la doc de php, puis j'ai même utilisé des regex... et en quelques tu avais la réponse sans passer par toutes ces fonctions :?
 
WRInaute occasionnel
verozaure a dit:
Code:
$tab_mois=array("janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre");

$date_tmp=str_replace(array(" ",":"),array("-","-"),$product_date);
list($annee,$mois,$jour,$heure,$minute,$seconde)=split("[./-]",$date_tmp);

$new_date=$jour." ".$tab_mois[$mois]." ".$annee

je viens de voir ta réponse, je vais essayer aussi
 
WRInaute accro
Le problème avec ces bouts de code c'est que c'est pas du tout évolutif. Le jour ou tu veux passer sur une version multilingue, tu dois reprendre le script...
 
WRInaute discret
Code:
$tab_mois['FR']=array("janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"); 
$tab_mois['UK']=array("january","february","march","april",....); 

$date_tmp=str_replace(array(" ",":"),array("-","-"),$product_date); 
list($annee,$mois,$jour,$heure,$minute,$seconde)=split("[./-]",$date_tmp); 

$date['FR']=$jour." ".$tab_mois['UK'][$mois]." ".$annee;
$date['UK']=$tab_mois['UK'][$mois]." "$jour." ".$annee;

echo $date['FR'];
etc....
 
WRInaute accro
Devoir éditer le code à chaque ajout de langue est pas ce que j'appelle un truc optimisé.

Par ailleurs, vu la demande initiale, il s'agit de convertir une date au format GMT, ce que le bout de code ci-dessous (en une ligne) fait très bien (et ce que ne fait pas vraiment de manière dynamique les bouts de code proposés ci-dessus -le +0100 étant ajouté en dur-):

Code:
<?php
$dInitial = "2008-12-10 10:10:30";
$tdate = explode(" ",$dInitial);
$tdatestart = explode("-",$tdate[0]);
$tdateend = explode(":",$tdate[1]);
echo gmdate("M d Y H:i:s", mktime ($tdateend[0],$tdateend[1],$tdateend[2],$tdatestart[1],$tdatestart[2],$tdatestart[0]));
?>
 
WRInaute occasionnel
screuscreu a dit:
SELECT DATE_FORMAT(Table.col,"%a, %d %b %Y %H:%i:%s ")
J'avais fait des test mais je n'ai pas réussi à le faire fonctionner.
Je viens encore d'essayer et la fonction ne me renvoi rien
Code:
SELECT DATE_FORMAT($tab.date,'%a, %d %b %Y %H:%i:%s ') FROM $tab
Alors que la fonction suivante me renvoie quelque chose:
Code:
SELECT $tab.date FROM $tab
 
WRInaute impliqué
silverbeach a dit:
screuscreu a dit:
SELECT DATE_FORMAT(Table.col,"%a, %d %b %Y %H:%i:%s ")
J'avais fait des test mais je n'ai pas réussi à le faire fonctionner.
Je viens encore d'essayer et la fonction ne me renvoi rien
Code:
SELECT DATE_FORMAT($tab.date,'%a, %d %b %Y %H:%i:%s ') FROM $tab
Alors que la fonction suivante me renvoie quelque chose:
Code:
SELECT $tab.date FROM $tab


Code:
SELECT DATE_FORMAT(date_ajout,"%a, %d %b %Y %H:%i:%s ") from users where id = 1
Chez moi le résultat est bon.

problème de version ?
 
WRInaute accro
Rod la Kox a dit:
UsagiYojimbo a dit:
Ah ouais, mais la Rod, c'est crado comme code.
J'dis pas le contraire, mais étant autodidacte, je ne connais pas les fonction php à 100%, donc... je m'adapte.

Mais ça, j'aime beaucoup...
screuscreu a dit:
Code:
SELECT DATE_FORMAT(date_ajout,"%a, %d %b %Y %H:%i:%s ") from users where id = 1

C'est vrai que niveau efficacité et poésie, c'est classieux :)
 
WRInaute impliqué
on peut vraiment faire des trucs de folie avec les dates
DELETE FROM `table_name` WHERE `time_col` < ADDDATE(NOW(), INTERVAL -1HOUR);


D'ailleurs pas que avec les dates. En général les gens se servent de sql pour des simples selects/updates/deletes et font tout le traitement en php ... dommage

Encore une fois : http://dev.mysql.com/doc/refman/5.0/en/ ... tions.html

Autre exemple : utilisez vous des CAST int to string ou autres ? Ca peut aider .... beaucoup !
 
Discussions similaires
Haut