Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1742 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] Bug étrange avec strftime (résolu)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP] Bug étrange avec strftime (résolu)

n°1354432
Profil sup​primé
Posté le 26-04-2006 à 16:01:08  answer
 

Voilà voilà, je fais un script de gestion de calendrier. Je  me suis aperçu qu'au mois d'octobre, il y avait deux dimanches. J'ai simplifié le script pour pouvoir le montrer ici :  
 

Code :
  1. <html><head></head><body>
  2. <?php
  3. setlocale(LC_TIME,"fr" );
  4. $timestamp=mktime(0,0,0,10,1,2006);
  5. $nb_jours=date("t",$timestamp);
  6. echo ("$nb_jours <table border=1>" );
  7. for($i=0;$i<$nb_jours;$i++)
  8. {
  9.  echo ("<tr><td>".strftime("%a",$timestamp+$i*24*3600)."</td>
  10. <td>".strftime("%d",$timestamp+$i*24*3600)."</td></tr>" );
  11. }
  12. echo ("</table>" );
  13. ?>
  14. </body></html>


 
 
Voilà. un simple script qui crée un timestamp pour le 1er Octobre 2006, et qui incrémente de (24*3600) le nombre de secondes pour chaque jour...
 
En toute logique, je ne devrait donc pas avoir :  
 
ven. 27
sam. 28
dim. 29
dim. 29

lun. 30
 
Quelqu'un a une idée?


Message édité par Profil supprimé le 27-04-2006 à 08:56:06
mood
Publicité
Posté le 26-04-2006 à 16:01:08  profilanswer
 

n°1354441
the_bigboo
Posté le 26-04-2006 à 16:08:23  profilanswer
 

utilise date() :o
c'est prévu pour ca
 
D'autre part il te manque un guillement a la fin de la ligne 7 :)

n°1354445
Profil sup​primé
Posté le 26-04-2006 à 16:11:47  answer
 

Il y est, il est juste codé en &#034;
 
Merci pour ta réponse, mais je dois avoir des résultats localisés en français, c'est pour ça que je n'utilise pas date...

n°1354448
the_bigboo
Posté le 26-04-2006 à 16:13:27  profilanswer
 

a mon humble avis tu te fera moins chier a utiliser date() avec un switch pour la conversion FR que ta methode :/

n°1354449
Profil sup​primé
Posté le 26-04-2006 à 16:14:03  answer
 

Je viens de tester avec la fonction date...
 
Sat 28
Sun 29
Sun 29
Mon 30
 
:/

n°1354459
Profil sup​primé
Posté le 26-04-2006 à 16:22:48  answer
 

encore plus étrange : avec  

Code :
  1. <?php
  2. $i=1;
  3. $nb_jours=date("t",mktime(0,0,0,10,$i,2008));
  4. echo ("$nb_jours <table border=1> " );
  5. for($i=1;$i<$nb_jours+1;$i++)
  6. {
  7.  echo ("<tr><td>".strftime("%a",mktime(0,0,0,10,$i,2008))."</td>
  8.  <td>".strftime("%d",mktime(0,0,0,10,$i,2008))."</td><td>".mktime(0,0,0,10,$i,2008)."</tr>" );
  9. }
  10. echo ("</table>" );
  11. ?>


 
c'est à dire remplacer le timestamp par un mktime (qui donne le même résultat), aucun bug...

n°1354480
the_bigboo
Posté le 26-04-2006 à 16:35:06  profilanswer
 

un conseil... en prog , il est conseillé de dissocier PHP et HTML
Si tu veux absolument savoir ou es ton erreur, affiche pour chaque execution la valeur des variables et tu sauras ou ca bug ;)

n°1354504
Profil sup​primé
Posté le 26-04-2006 à 16:46:10  answer
 

ce que j'ai fais... Il y a un décalage à partir de la 2e itération de la boucle : avec ce script :

Code :
  1. <?php
  2.  echo ("$nb_jours <table border=1> " );
  3. $timestamp=mktime(0,0,0,10,$i,2008);
  4. for($i=1;$i< (date("t",mktime(0,0,0,10,$i,2008))+1);$i++)
  5.  $timestamp_t=$timestamp+($i*24*3600);
  6.  echo ("<tr><td>".strftime("%a",mktime(0,0,0,10,$i,2008))."</td>
  7.  <td>".strftime("%d",mktime(0,0,0,10,$i,2008))."</td><td>".mktime(0,0,0,10,$i,2008)."</td>
  8.  <td>".$timestamp."</td>
  9.  <td>".(mktime(0,0,0,10,$i,2008)-$timestamp)."</td>
  10.  <td>$i</td></tr>" );
  11. }
  12. echo ("</table>" );
  13. ?>


 
 
ça me donne  
 
Jour   N° du jour      timestamp avec mktime      timestamp avec $timestamp+($i-1)*24*3600;      différence des deux
Wed   01             1222812000                       1222812000                                     0    
Thu  02              1222898400                       1222984800                                  -86400
 
On voit bien que à partir de la deuxième itération, il y a une différence entre le mktime créé et le timestamp qu'on incrémente... quand on divise la différence par 3600 on obtient... 24.


Message édité par Profil supprimé le 26-04-2006 à 16:55:12
n°1354509
the_bigboo
Posté le 26-04-2006 à 16:49:41  profilanswer
 

en ce cas regardes a quel moment la valeur de ces variables est modifié et affiche les séparément, si ca se trouve ton $timestamp+$i*24*3600 le dérange au niveau de la priorité d'execution des opération, essaye avec des parentheses.

n°1354522
Profil sup​primé
Posté le 26-04-2006 à 16:56:49  answer
 

Une idée: ça viendrait pas du changement d'heure?
 
Car les mêmes décalages d'une heure apparaissent en mars... mais en négatif...


Message édité par Profil supprimé le 26-04-2006 à 16:58:00
mood
Publicité
Posté le 26-04-2006 à 16:56:49  profilanswer
 

n°1354641
Profil sup​primé
Posté le 26-04-2006 à 18:53:11  answer
 

Effectivement, ça vient bien du changement d'heure. Il faut refaire un mktime après chaque changement d'heure français...

n°1354704
the_bigboo
Posté le 26-04-2006 à 20:30:57  profilanswer
 

encore fallait-il y penser ! :sweat:

n°2016366
jhice
Posté le 12-08-2010 à 13:09:51  profilanswer
 

Up

Citation :

Effectivement, ça vient bien du changement d'heure. Il faut refaire un mktime après chaque changement d'heure français...

N'ayant pas compris le "refaire un mktime" j'ai cherché une autre solution au problème. Et elle se trouve dans l'usage de la fonction strtotime, qui elle, gère le changement d'heure ! http://php.net/manual/en/function.strtotime.php
 
Exemple d'utilisation (un form envoie mois, jour, annee et un nombre de nuits à réserver à l'hôtel) :

Code :
  1. $jourResaTime = mktime(0, 0, 0, $_POST['mm'], $_POST['jj'], $_POST['aaaa']);
  2. // CALCUL AVEC STRTOTIME : GERE LES HEURES ETE / HIVER
  3. $departTime = strtotime("+".$_POST['nb_nuits']." day", $jourResaTime);
  4. $jourDepart = date('d F', $departTime);

Cela fonctionne sur les dimanches des changements d'heure, ce qui n'était pas le cas avec les autres fonctions de dates.
 
Cela pourra servir aux personnes qui arrivent sur ce vieux post ;)


Message édité par jhice le 12-08-2010 à 13:11:08

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] Bug étrange avec strftime (résolu)

 

Sujets relatifs
[Résolu] Simuler un click[PHP] connection imprimante windows
[PHP] Interface de gestion d'un menu customizable...[.NET] [En partie résolu] debug appli web
[PHP/MySQL] access denied, mais ca passe enligne de commande[Résolu] Inverse de like
[résolu] Problème fonction remplacer les accentspetit probléme de requete MySQL avec l'utilisation d'une variable PHP
[PHP] GetText[RESOLU] Différence de 2 dates
Plus de sujets relatifs à : [PHP] Bug étrange avec strftime (résolu)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR