[résolu]convertir une date

silverbeach
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 333
Inscription: 20 Juil 2005

[résolu]convertir une date

Message le Mar Déc 09, 2008 17:47

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:
Dernière édition par silverbeach le Mar Déc 09, 2008 23:22, édité 1 fois.


blman
WRInaute accro
WRInaute accro
 
Messages: 3077
Inscription: 5 Sep 2003

Message le Mar Déc 09, 2008 18:17

As-tu regardé avec la fonction date en PHP : http://fr.php.net/date ? Couplée avec mktime, ça devrait t'aider.


Marie-Aude
Modérateur
Modérateur
 
Messages: 11878
Inscription: 5 Juin 2006

Message le Mar Déc 09, 2008 18:18

as tu essayé avec strftime ?

Rod la Kox
WRInaute accro
WRInaute accro
 
Messages: 3253
Inscription: 24 Juin 2008

Message le Mar Déc 09, 2008 18:50

silverbeach a écrit:...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:


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8575
Inscription: 23 Nov 2005

Message le Mar Déc 09, 2008 19:04

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).

verozaure
WRInaute discret
WRInaute discret
 
Messages: 128
Inscription: 7 Avr 2004

Message le Mar Déc 09, 2008 19:05

Code: Tout sélectionner
$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

silverbeach
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 333
Inscription: 20 Juil 2005

Message le Mar Déc 09, 2008 19:08

Merci Rod la Kox, ton script fonctionne, il y a juste quelques trucs à modifier pour que que ca fonctionne parfaitement.

Rod la Kox a écrit:
silverbeach a écrit:...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 :?

silverbeach
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 333
Inscription: 20 Juil 2005

Message le Mar Déc 09, 2008 19:09

verozaure a écrit:
Code: Tout sélectionner
$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


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8575
Inscription: 23 Nov 2005

Message le Mar Déc 09, 2008 19:15

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...

verozaure
WRInaute discret
WRInaute discret
 
Messages: 128
Inscription: 7 Avr 2004

Message le Mar Déc 09, 2008 19:33

Code: Tout sélectionner
$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....


UsagiYojimbo
WRInaute accro
WRInaute accro
 
Messages: 8575
Inscription: 23 Nov 2005

Message le Mar Déc 09, 2008 20:06

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: Tout sélectionner
<?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]));
?>


screuscreu
WRInaute impliqué
WRInaute impliqué
 
Messages: 968
Inscription: 14 Jan 2008

Message le Mar Déc 09, 2008 21:29

Pourquoi s'embêter alors que l'on peut demander au SQL de sortir directement le résultat ?

SELECT DATE_FORMAT(Table.col,"%a, %d %b %Y %H:%i:%s ")

A vérifier mais cela me parait ... pas mal
http://dev.mysql.com/doc/refman/5.0/en/ ... tions.html

silverbeach
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 333
Inscription: 20 Juil 2005

Message le Mar Déc 09, 2008 22:07

screuscreu a écrit: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: Tout sélectionner
SELECT DATE_FORMAT($tab.date,'%a, %d %b %Y %H:%i:%s ') FROM $tab

Alors que la fonction suivante me renvoie quelque chose:
Code: Tout sélectionner
SELECT $tab.date FROM $tab


screuscreu
WRInaute impliqué
WRInaute impliqué
 
Messages: 968
Inscription: 14 Jan 2008

Message le Mar Déc 09, 2008 22:13

silverbeach a écrit:
screuscreu a écrit: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: Tout sélectionner
SELECT DATE_FORMAT($tab.date,'%a, %d %b %Y %H:%i:%s ') FROM $tab

Alors que la fonction suivante me renvoie quelque chose:
Code: Tout sélectionner
SELECT $tab.date FROM $tab



Code: Tout sélectionner
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 ?

Rod la Kox
WRInaute accro
WRInaute accro
 
Messages: 3253
Inscription: 24 Juin 2008

Message le Mar Déc 09, 2008 22:56

UsagiYojimbo a écrit: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 écrit:
Code: Tout sélectionner
SELECT DATE_FORMAT(date_ajout,"%a, %d %b %Y %H:%i:%s ") from users where id = 1

[résolu]convertir une date

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités