Page 1 sur 1

Problème de formattage de date

Posté : 29 août 2012, 15:20
par mortimer.pw
Bonjour,

Je n'y connais pas grand chose à PHP et j'ai un problème avec une fonction qui formatte la date.
Elle fonctionne trés bien sur plusieurs serveurs.

Je suis sur une machine en : white box linux release 4 32bit PHP 5.2.12.

Voilà la fonction (je l'ai remis dans une simple page) :

<?php
$s_date="29-08-2012";
$day = strtok($s_date, '-');
$month = strtok('-');
$year = strtok('-');
$tsp1= mktime(0,0,0, $month, $day+1, $year);
$sFormat=($sFormat=="")?"d-M-y":$sFormat;
$result1=gmdate( $sFormat,$tsp1);
print_r($tsp1." ".$result1."</pre>");
?>

En entrée je donne la date d'aujourd'hui, et il m'affiche bien "29 08 2012"
En sortie, il m'affiche "30-Aug-12"
Je vois bien que la fonction est un peu "bête" et que l'on peut certainement écrire cela autrement.

J'espère vous donner suffisamment d'infos.

Avez-vous une idée de l'origine du problème ?

D'avance merci pour votre aide.

Re: Problème de formattage de date

Posté : 29 août 2012, 15:54
par schim59
Bonjour,

"d-M-y" a changer en, si tu veux modifier le format de la date. Attention à la casse.

http://php.net/manual/fr/function.date.php

Bon codage.

Re: Problème de formattage de date

Posté : 29 août 2012, 16:06
par mortimer.pw
Bonjour Schim59,

En utilisant "d-M-y", il me retourne bien le format :
jour sur 2 chiffres,
mois sur 3 lettres (en anglais),
année sur 2 chiffres.

Le problème n'est pas sur le format mais sur la valeur : je donne le 29 en entrée et il me retourne le 30 en sortie ???

Merci pour ton aide.

Re: Problème de formattage de date

Posté : 29 août 2012, 16:56
par schim59
ah ok lol

$day+1 ???

Re: Problème de formattage de date

Posté : 29 août 2012, 17:31
par moogli
salut,

utilise simplement la classe dateTime

tu pourras faire les calculs de date très simplement plus les changements de format.

sinon indiquer ce qui ne va pas clairement devrais nous aider à t'aider :)

@+

Re: Problème de formattage de date

Posté : 30 août 2012, 08:27
par mortimer.pw
Bonjour Moogli,

Il s'agit d'une application de plusieurs milliers de lignes, que je n'ai pas développé.
Seule cette fonction semble ne pas marcher correctement.
Il est certainement possible de l'écrire autrement mais ce n'est pas le but de mon post.

Pour indiquer clairement ce qui ne va pas :
C'est une fonction qui formatte la date,
En entrée je donne une date dans un format, en sortie je dois récupérer la MEME date dans un autre format,
Problème : la date est différente.
Exemple : 29-08-2012 en entrée, 30-Aug-12 en sortie.

Mes questions :
Pourquoi ?
Y a t'il des particularités sur les fonctions PHP (mktime, gmdate) ?
L'environnement système peut-il être à la source du problème ? La configuration PHP ?

Re: Problème de formattage de date

Posté : 30 août 2012, 09:34
par mortimer.pw
Une précision qui peut avoir son importance, au vue de ce que je lis sur le net : le serveur est à Dakar.

Peut être un problème d'heure GMT ? locale ?

Si cela peut vous aider.

Re: Problème de formattage de date

Posté : 30 août 2012, 12:58
par moogli
comme schim59 te l'indique il y a un incrément sur la date ($day+1 sur le mktime)

prendre 2 minutes pour comprendre ton code t'aurais aidé
<?php
$s_date="29-08-2012"; // une date
$day = strtok($s_date, '-');// récupère ce qu'il y a avant le 1ère -
$month = strtok('-'); // le second
$year = strtok('-'); // le troisème
$tsp1= mktime(0,0,0, $month, $day+1, $year); // on créer un timestamp à partir des infos précédente, en ajoutant un jour
$sFormat=($sFormat=="")?"d-M-y":$sFormat; // format par défaut s'il n'existe pas déjà : la pour le coup variable $sFormat qui n'existe pas !
$result1=gmdate( $sFormat,$tsp1); // formate la date
print_r($tsp1." ".$result1."</pre>"); // affiche la date
?>
Le code fait donc bien ce que tu indique !

doc de strtok http://fr.php.net/strtok
doc de mktime http://fr.php.net/mktime
doc de gmdate http://fr.php.net/gmdate

Même sasns la classe datetime, utiliser les fonctions strftime et strtotime font la même chose en une ligne !
maintenant si le but est de changer le format de la date, des classes toutes faites existe pour cela, tu y gagne en lisibilité (moins de ligne de code, elles sont plus claires) et en efficacité (les classes / fonction natives sont plus rapide).


@+

Re: Problème de formattage de date

Posté : 30 août 2012, 16:48
par mortimer.pw
Moogli,

J'ai bien lu la remarque de Schim59. J'ai bien vu le "+1".

J'ai pris plus de 2 minutes pour comprendre LE code, car pas le mien et je n'y connais rien en PHP.

Merci pour les liens, j'ai déjà lu ces docs mais cela ne m'apporte pas de réponse.

J'essaye juste de comprendre pourquoi cela fonctionne sur nos serveurs en France et pas sur celui de Dakar.

As-tu une réponse à m'apporter sur ce point ?
Peut-il y avoir des différences de comportement en fonction de l'environnement ?

Re: Problème de formattage de date

Posté : 30 août 2012, 17:46
par moogli
non le jour de plus est clairement stipulé dans le code.

au pire gmdate peu induire un décalage horaire (comme indiqué dans la doc) mais pas d'un jour (a priori ils sont à l'heure GMT et nous GMT +2 donc à part si tu test entre 22h et minuit ça ne doit pas arriver.

Est ce que les deux code sont indentique ?

est ce qu'il n'y a pas un 'rattrapage' quelque part ?

les 8 lignes de codes fournies induise un jour de plus la comme ça avec ces 8 lignes y a pas de raison que cela soit différent.

les configurations de serveur sont identique ? (même version de php ? avec la même conf).


@++