OVH Cloud OVH Cloud

strtotime le retour

15 réponses
Avatar
Etienne SOBOLE
salut

j'en suis toujours a essayer de traiter mes dates...
et me question est comment
remplacer
Mar, 28 Mar 2005 16:32:16 +0200
par
Mon, 28 Feb 2005 16:32:16 +0200

y a t-il un un moyen d'utiliser un tableau de correspondance pour les jours
et un autre pour les mois.
mon expression regulière de recherche est:
/(\w+), (\d+) (\w+)(.*)/i";
mais commet utiliser preg_replace pour remplacer
Lun par Mon
et
Fev par Feb
???

j'ai essayé ca:
$tJour = array(
'Lun' => 'Mon',
'Mar' => 'Tue',
'Mer' => 'Wed',
'Jeu' => 'Thu',
'Ven' => 'Fri',
'Sam' => 'Sat',
'Dim' => 'Sun');

$tMois = array(
'Jan' => 'Jan',
'Fev' => 'Feb',
'Mar' => 'Mar',
'Avr' => 'Apr',
'Mai' => 'May',
'Jun' => 'Jun',
'Jui' => 'Jul',
'Aou' => 'Aug',
'Sep' => 'Sep',
'Oct' => 'Oct',
'Nov' => 'Nov',
'Dec' => 'Dec');

$pattern = "/(\w+), (\d+) (\w+)(.*)/i";
$replacement = "\$tJour\[$1\], $2 $tMois\[$3\]$4";
$tmpdate = preg_replace($pattern, $replacement, $date);

mais ca ne marche pas malheureuseument....
Etienne

10 réponses

1 2
Avatar
CrazyCat
Essaye plutot:
$french = Array("Lun", "Mar,", "Mer", "Jeu", "Ven", "Sam", "Dim", "Jan",
"Fev", "Mar ", "Avr", "Jun", "Jui", "Aou", "Sep", "Oct", "Nov", "Dec");
$english = Array("Mon", "Tue,", "Wed", "Thu", "Fri", "Sat", "Sun",
"Jan", "Feb", "Mar ", "Apr", "Jun", "Jui", "Aug", "Sep", "Oct", "Nov",
"Dec");
$tmpdate = preg_replace($french, $english, $date);

Attention: note bien la virgule après le "Mar" de mardi et l'espace
après le "Mar" de mars.

--
Découvrez Original War: http://www.original-war.org
Humour: http://www.chatfou.com
Tchattez en liberté: http://www.c-p-f.net
Avatar
WebRod
salut,

pour revenir à l'origine de ton problème.
Tu récupères comment tes mails, parceque il y a normalement un champs udate
qui te renvoit la date au format unix non?
L'avantage c'est que tu récupères la date de récéption du mail sur le
serveur et non celle d'envoi qui elle est mise à jour par le client (et donc
qui peut être à différent format surtout si le type qui envoit l'email n'a
pas configuré la bonne heure sur son PC!!!!).
Alors de mémoire certains serveur ne la mettent pas à jour, mais le tien le
fait surement. De mémoire aussi j'ai déjà vu des mails sur un même serveur
(moins de 0.5%) qui avaient ce champs vide (alors que les autres l'avaient
bien). Mais bon ca marche pour la plupart des cas.

Sinon du côté de pear:
http://pear.php.net/package/Date

pas testé mais peut-être qu'ils ont la solution à ton problème

Rod
Avatar
Etienne SOBOLE
pour revenir à l'origine de ton problème.
Tu récupères comment tes mails, parceque il y a normalement un champs
udate qui te renvoit la date au format unix non?
L'avantage c'est que tu récupères la date de récéption du mail sur le
serveur et non celle d'envoi qui elle est mise à jour par le client (et
donc qui peut être à différent format surtout si le type qui envoit
l'email n'a pas configuré la bonne heure sur son PC!!!!).
Alors de mémoire certains serveur ne la mettent pas à jour, mais le tien
le fait surement. De mémoire aussi j'ai déjà vu des mails sur un même
serveur (moins de 0.5%) qui avaient ce champs vide (alors que les autres
l'avaient bien). Mais bon ca marche pour la plupart des cas.


Exact.
Il y a bien un champ Received (dans l'entete desmails), qui contient la date
a laquelle le mail est arrivée...
Donc effectivement, la logique voudrait que cette date etant mise par le
serveur de mail soit de structure constante...
Vais peut etre m'orienter dans cette direction effectivement.
cela me semble moins stupide que continuer ma tentative de décodage...

le probleme c'est que parfois il y a plusieurs minutes entre l'envoi et la
reception...
et lorsque tu dis a quelqu'un: votre mail du 18 janvier 2005 a 15h12,
ben souvent il te repond... ben j'en ai pas a cette heure la ;)

Bref. je vais quand meme faire comme tu dis, prce que sinon c'est sans
fin...
ou alors mieux, je vais faire avec la date actuelle que j'utilise et la date
de reception serveur en cas de probleme...
voila qui me semble bien.

Merci
Etienne

Sinon du côté de pear:
http://pear.php.net/package/Date

pas testé mais peut-être qu'ils ont la solution à ton problème

Rod


Avatar
WebRod
Exact.
Il y a bien un champ Received (dans l'entete des mails), qui contient la
date a laquelle le mail est arrivée...


en fait je ne parlais pas exactement de ce champs, mais finalement ils
doivent retourner la même valeur.
Le champs udate est un attribut du mail qui est mis à jour par le serveur,
c'est un timestamp UNIX (la date n'est donc pas lisible directement il faut
la convertir).
Il faut voir du côté des fonctions imap pour y accéder.

le probleme c'est que parfois il y a plusieurs minutes entre l'envoi et la
reception...
et lorsque tu dis a quelqu'un: votre mail du 18 janvier 2005 a 15h12,
ben souvent il te repond... ben j'en ai pas a cette heure la ;)


exact, si ceci est important pour l'utilisation que tu vas en faire, alors
ce n'est pas une bonné idée.
Mais j'ai déjà examiné de nombreux headers lors d'un développement de
parsing d'emails et je me suis rendu compte qu'utiliser la date du client
(vrai date d'envoi) relevait du casse tête (beaucoup trop de formats
différents, voir des formats TRES etranges).
D'ailleurs les logiciels type outlook se servent de la date de récéption du
mail par le serveur (champs udate ou le champs dont tu parles dans le
header), pas de la date d'envoi.
Ce qui veut tout dire....
il faut donc voir le pourcentage de cas où le type aura vraiment besoin de
connaitre la minute pour retrouver son mail!!( cas où le type t'envoie plein
de mails à la minute eventuellement)
Le "sujet" doit pouvoir l'aider aussi, en comptant le nombre de : "Re:" ;-)

Rod

Avatar
nospam
Etienne SOBOLE wrote:

j'en suis toujours a essayer de traiter mes dates...
et me question est comment
remplacer
Mar, 28 Mar 2005 16:32:16 +0200
par
Mon, 28 Feb 2005 16:32:16 +0200

y a t-il un un moyen d'utiliser un tableau de correspondance pour les jours
et un autre pour les mois.
mon expression regulière de recherche est:
/(w+), (d+) (w+)(.*)/i";


Tu devrais pouvoir t'en sortir avec preg_replace_callback()

A vue de nez (sans avoir testé):

$pattern = "/(w+), (d+) (w+)(.*)/i";
$date = "Mar, 28 Mar 2005 16:32:16 +0200";

$ndate = preg_replace_callback($pattern, "dateTranslate", $date);

Associé à la fonction:


function dateTranslate(/*array*/ $matches) {
// Initialisation de tes tableaux $tJour et $tMois
// ...

$matches[1] = $tJour[$matches[1]];
$matches[3] = $tMois[$matches[3]];

return $matches[1] . ", " . $maches[2] . " " . $matches[3] .
$matches[4];
}

--
Romuald Brunet, ICQ 33033393, http://mog.online.fr

Remplacez nospam par mon prénom pour me contacter par email

Avatar
Etienne SOBOLE
Tu devrais pouvoir t'en sortir avec preg_replace_callback()


Ah oui. c'est exact.
Meme si j'ai fini par me rapprocher de la solution proposée par Rod,
je prend note tout de meme de cette solution qui fonctionne.

Vais garder ca dans un petit coin de ma tête ca pourra toujours servir.

merci.
Etienne

Avatar
Lol Zimmerli
Hello,

Etienne SOBOLE écrit/wrote:

j'ai essayé ca:
$tJour = array(
'Lun' => 'Mon',
'Mar' => 'Tue',
'Mer' => 'Wed',
'Jeu' => 'Thu',
'Ven' => 'Fri',
'Sam' => 'Sat',
'Dim' => 'Sun');

$tMois = array(
'Jan' => 'Jan',
'Fev' => 'Feb',
'Mar' => 'Mar',
'Avr' => 'Apr',
'Mai' => 'May',
'Jun' => 'Jun',
'Jui' => 'Jul',
'Aou' => 'Aug',
'Sep' => 'Sep',
'Oct' => 'Oct',
'Nov' => 'Nov',
'Dec' => 'Dec');

$pattern = "/(w+), (d+) (w+)(.*)/i";
$replacement = "$tJour[$1], $2 $tMois[$3]$4";
$tmpdate = preg_replace($pattern, $replacement, $date);

mais ca ne marche pas malheureuseument....



$tJour_chercher = array('Lun', 'Mar'...
$tJour_remplacer = array('Mon', 'Tue'...
$tmpdate = str_replace($tJour_chercher, $tJour_remplacer, $date);

En refaisant les 3 lignes pour les mois ça devrait être bon.

À+

--
Lol Zimmerli - http://www.lzi.ch/lol/
Dieu a sagement agi en plaçant la naissance avant la mort;
sans cela, que saurait-on de la vie ?
-+- Alphonse Allais -+-

Avatar
Etienne SOBOLE
$tJour_chercher = array('Lun', 'Mar'...
$tJour_remplacer = array('Mon', 'Tue'...
$tmpdate = str_replace($tJour_chercher, $tJour_remplacer, $date);

En refaisant les 3 lignes pour les mois ça devrait être bon.



Non car le mardi 21 mars 2005
exprimé en francais
Mar, 21 Mar 2005...
devient
Tue, 21 Tue 2005...
en anglais...

Etiennne

Avatar
CrazyCat
Etienne SOBOLE wrote:
Non car le mardi 21 mars 2005
exprimé en francais
Mar, 21 Mar 2005...
devient
Tue, 21 Tue 2005...
en anglais...


Donc, voir ma solution qui consiste à définir le mardi français comme
"Mar," (donne "Tue,") et le mois de mars comme "Mar " (donne "Mar ")

Mais ma solution n'ayant pas eu une seule réponse, j'en conclus qu'elle
est parfaite, cela ne m'étonne pas ;)

--
Découvrez Original War: http://www.original-war.org
Humour: http://www.chatfou.com
Tchattez en liberté: http://www.c-p-f.net

Avatar
Etienne SOBOLE
Donc, voir ma solution qui consiste à définir le mardi français comme
"Mar," (donne "Tue,") et le mois de mars comme "Mar " (donne "Mar ")


Oui effectivement ca marche dans ce cas ;)

Mais ma solution n'ayant pas eu une seule réponse, j'en conclus qu'elle
est parfaite, cela ne m'étonne pas ;)


hehe
Mais ne risue t-il pas d'y avoir des probleme avec d'autres langue?
Etienne

1 2