comment comparer en PHP deux heures

comment comparer en PHP deux heures - PHP - Programmation

Marsh Posté le 22-01-2015 à 17:39:03    

Bonjour tout le monde
 
je souhaiterais comparer l'heure actuelle a deux ou trois heures de reference de la journée
 
voila ce que j'ai essayé et qui a pas l'air de fonctionner
 


$heure = date("H:i" );
$milieu_tranche=15;
if ($heure <= $milieu_tranche)
  {
  echo "<br> il est avant 15H<br>";
  }
  else
  {
  echo "<br> il est apres 15H<br>";
  }


 
merci à ceux qui peuvent m'aider à corriger ce morceau de code
peut etre faut il mettre la chaine "15:00" dans milieu-tranche et utiliser strcmp?
 
 :hello:

Reply

Marsh Posté le 22-01-2015 à 17:39:03   

Reply

Marsh Posté le 22-01-2015 à 21:51:40    

apres quelques tests on dirait en fait que ce qui ne marche pas c'est qu'a 15h12 (ou toutes les autres possibilités de minnutes), le test indique qu'il est avant 15h00
 
par contre a 21h50 ca va il dit qu'on est apres
 
est ce que je peux mettre dans $milieu_tranche=15:00
ou bien plutot "15:00" (dans ce deuxieme cas le <= va t'il fonctionner ou bien il faudrait plutot strcmp)
ou enfin tout convertir en minutes et comparer avec <=?
 
:??:

Reply

Marsh Posté le 22-01-2015 à 21:56:54    

dans ce cas là utilise plutôt des timestamps ou carrément des objets DateTime.


---------------
Créer son forum gratuit |  Mon beau blog phpBB caÿ le mal :o
Reply

Marsh Posté le 22-01-2015 à 22:03:10    

cad scull? comment faudrait que je modifie pour utiliser timestamps?
 
subsidiarement je mettais parfois 24 dans $milieu_tranche (je suppose que ca va pas fonctionner avec timestamps mais que je peux peut etre continuer avec mon 24, car dans ce cas particulier j'aurais pas d'ennuis de minutes)


Message édité par tintin34 le 22-01-2015 à 22:06:55
Reply

Marsh Posté le 22-01-2015 à 22:08:46    

Quelque chose comme cela :

Code :
  1. function isDateBefore($dateReference, $date)
  2. {
  3.     $dateReference = new \DateTime($dateReference);
  4.     $date = new \DateTime($date);
  5.     return (bool) ($dateReference>$date);
  6. }
  7. $comparaison = isDateBefore('2014-06-21 15:20:31', '2014-06-21 15:42:26');


---------------
Créer son forum gratuit |  Mon beau blog phpBB caÿ le mal :o
Reply

Marsh Posté le 23-01-2015 à 08:54:45    

ok merci scull pour ton aide :hello:

Reply

Marsh Posté le 23-01-2015 à 10:00:32    

+1 pour les timestamps. Avec ta méthode, tu comparais des chaînes de caractères et non des nombres :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 23-01-2015 à 21:12:46    

ok merci aussi pour ton intervention rufo
 
peut etre que il y a des points qui m'echapent mais en effet on dirait que heure est une chaine dans mon code mais après est ce que ca change quelque chose si je la compare a une chaine qui correspond a 15h a priori donc cela pourrait etre dans mon esprit sous cette forme
 
15:00 la comparaison de chaine pourrait aussi donner le résultat, non?
 
si l'heure actuelle est par exemple 21:12 sous forme d'une chaine donc comparée a celle de 15:00 la comparaison de chaine semble donner le bon ordre :heink:
 
PS j'ai un dernier petit soucis mais je sais pas si il est lié a php ou plutôt comme je le pense a html, il s'agit d'une combo liste
au premier chargement la variable que j'utilise ensuite dans mon code php vaut bien 0 et la combo liste est bien positionnée sur le premier choix, si on change tout se passe bien mais si on revient au premier choix il se passe rien du moins avec firefox (j'ai pas encore essayé les autres navigateurs
 
j'ai utilisé ca et je me demandais si ca pouvait venir du mot selected
 


<option selected value="0">&nbsp;La tomate</option>
<option value="1">&nbsp;le poireau</option>


Message édité par tintin34 le 23-01-2015 à 21:29:14
Reply

Marsh Posté le 25-01-2015 à 13:15:19    

si ca peut aider pour me donner des pistes de ce qu'il ne marche pas
 
ci apres les deux parties de codes
 


<form method="post" action="" name="formu1">  
 
    <DIV id="Layer1">
  <?php include("legume3.php" ); echo "<FONT COLOR=navy SIZE=2>".$vv[$GLOBALS['cvm']]."<BR>".$info[$legume[0]]."</FONT>"; ?>
 </DIV>
 <P>
 <select name="place1" id="place1" class="slegume" onChange="submit();">  
          <option selected value="0">&nbsp;La tomate</option>  
          <option value="1">&nbsp;le poireau</option>  
          <OPTGROUP label="&nbsp;---------------" ></OPTGROUP>
          <option value="3">&nbsp;Abricot</option>
    </select>  
                     
 
 </P>  
</form>


 
legume3.php


<?
header('Content-Type: text/html; charset=UTF-8');
$cvm="";
$buffer="";
$info = array('La tomate'=>'Soleil','le poireau'=>'terre','Abricot'=>'arbre');
 
$vv = array('La tomate','le poireau','Abricot');
 
if (!isset($_POST["place1"]))
{
$cvm="0";
$_POST["place1"]=$cvm;
 
}
$cvm=$_POST["place1"];
 
//----- traitement
//----- presentation des resultats
 
?>


 
Ps : ne sachant pas trop dans quelle catégorie peut aller ce dernier soucis, j’espère que les gens qui me lisent pourront m'aider (ou les moderateurs m'indiquer où ce dernier point serait plus approprié)
 
:sweat:

Reply

Marsh Posté le 25-01-2015 à 13:50:07    

$_POST n'est pas accessible en écriture il me semble. Faire plutôt en début de code :
$ArrayPost = $_POST;
 
Ensuite, tu travailles avec $ArrayPost.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 25-01-2015 à 13:50:07   

Reply

Marsh Posté le 25-01-2015 à 21:53:57    

merci rufo mais n'est ce pas justement ce que je fais
 
mais au lieu d'avoir utilisé $arrayPost je l'ai appelé $cvm
 
?
:heink:
 
PS: tout marche tes bien sauf le cas 0 lorsqu'on y revient. Le premier chargement se passe bien c'est le if qui doit le forcer les cas 1 2, 3... se passent aussi bien mais si on souhaite a un moment revenir au choix 0 il se passe rien $cvm ne reprend pas la valeur 0
 
et la seule explication que j'imagine pourrait venir de l'utilisation de selected, non? ca vous parait absurde?


Message édité par tintin34 le 25-01-2015 à 21:58:26
Reply

Marsh Posté le 26-01-2015 à 10:29:33    

Non, c'est pas ce que tu fais. A un moment, dans ton code, on trouve cette ligne :
$_POST["place1"]=$cvm;  
 
Si $_POST est en lecture seule comme je le pense, alors ton affectation ne fonctionne pas.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 26-01-2015 à 11:35:10    

rufo il y quelque chose que j'ai pas du comprendre :??:  
 
la ligne de code que tu cites $_POST["place1"]=$cvm; est dans un IF
 
celle que tu me suggères est apres et est normalement faite systématiquement
$cvm=$_POST["place1"];  
 
j'ai rajouté des echo dans le if et apres pour vérifier si on fait le IF ou non
 
le scenario est le suivant
1) on charge la page
on entre dans le IF, (peut etre et meme surement l'affectation ne se fait pas comme tu le dis), mais je mets malgré tout "0" dans $cvm que je vais utiliser dans mon traitement (à la place de $_POST, comme tu me l'indiques)
 
ensuite il ya donc le traitement et la présentation des résultats est correcte et correspond bien au choix 0
 
2) je choisi ensuite dans la combo liste par exemple le choix 3
$_POST étant maintenant défini, c'est logiquement qu'on ne fait pas le IF, $cvm récupère bien "3" et traitement et présentation qui s'en suivent correspondent au choix 3
 
3) on choisi n'importe quel autre choix de la liste (autre que le premier)
 
tout se passe tres bien de manière totalement analogue à ce qui se passe au (2) on entre pas plus dans le IF et la ligne que tu cites n’interfère toujours en rien
 
4) maintenant je veux de nouveau reprendre le choix 0, le premier
on entre pas là encore dans le IF et ne fait pas plus la ligne que tu dis
 
tout ceci est logique vu que j'avais mis le IF uniquement pour le cas du premier chargement qui est spécial
 
et c'est justement la ligne $cvm=$_POST["place1"]; qui ne récupère pas "0" dans $cvm
 
et ensuite on voit qu'il n'y a aucun traitement, la page est pas rafraichie, elle reste dans le précédant choix comme si le onchange=submit() ne fonctionnait pas
 
 
je remarque autre chose et je ne sais pas si c'est normal ou non
la combo liste dans la page est affichée en dernier sous la présentation des résultats
 
pour effectuer un choix tu cliques sur la petite fleche a droite et la liste apparait, tu choisis par exemple le 3, la liste disparait, le choix 3 apparait un cout instant dans la fenêtre simplifiée de la combo liste puis on voit qu'il y a traitement rafraichissement du résultat et on revient à l'affichage de la combo liste qui dans la fenêtre n'affiche plus le choix 3 mais a nouveau le 0
 
Il me semble donc vu ce que je viens a l'instant de decrire qu'en effet ensuite onchange peut poser problème
 
NB: j'ai aussi essayé de mettre en commentaire la ligne que tu cites comme pouvant ne pas fonctionner
// $_POST["place1"]=$cvm;  
 
là le premier chargement de la page s'interrompt tres vite et pas traitement, pas de combo liste rien
 
voilà en espérant que ces observations puissent permettre de trouver plus précisément le hic :)

Reply

Marsh Posté le 26-01-2015 à 12:51:27    

Code :
  1. if (!isset($_POST["place1"]))
  2. {
  3.     $cvm="0";
  4.     $_POST["place1"]=$cvm;  // <- ne devrait pas marche a priori
  5. }
  6. $cvm=$_POST["place1"]; // <- si if fait avant, tu écrases le 0 de $cvm !


$cvm ne contiendra jamais 0 avec ton code :o


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 26-01-2015 à 13:55:00    

rufo a écrit :

Code :
  1. if (!isset($_POST["place1"]))
  2. {
  3.     $cvm="0";
  4.     $_POST["place1"]=$cvm;  // <- ne devrait pas marche a priori
  5.     echo "<br>on est dans le IF et cvm=".$cvm;
  6. }
  7. $cvm=$_POST["place1"]; // <- si if fait avant, tu écrases le 0 de $cvm !
  8. echo "<br>on est apres et cvm=".$cvm;


$cvm ne contiendra jamais 0 avec ton code :o


 
 
J'ai rajouté les deux lignes en bleu et pourtant cvm contient bien 0 au premier chargement (et plus jamais ensuite)
comme precisé plus haut l'affichage se deroule ainsi
 
1) on est dans le IF et cvm=0
    on est apres et cvm=0
 
2)  on est apres et cvm=3
 
3) on est apres et cvm=2
 
4) la page ne se rafraichie pas elle reste comme a (3)

Reply

Marsh Posté le 26-01-2015 à 14:12:20    

Bon, donc ça semble indiquer que $_POST n'est pas en lecture seule alors :/
Cela dit, ça serait plus logique d'écrire ça :

Code :
  1. if (!isset($_POST["place1"]))
  2. {
  3.     $_POST["place1"]=0;
  4. }
  5. $cvm=$_POST["place1"];


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 26-01-2015 à 15:57:16    

euh non rufo, je dis pas que tu as tord concernant la lecture seule de $_POST
 
l'affichage que j'ai indiqué montre uniquement que $cvm recoit une seule fois 0 au premier chargement il montre aussi qu'on ne passe qu'une seule fois dans le IF (ca c'est normal)
 
et il montre enfin que la seconde fois (et les suivantes) $_POST["place1"] ne reprend pas la valeur 0 malgré le fait de le choisir dans la comboliste
 
toutefois comme je l'ai suggèré (mais je sais pas corriger) c'est je pense au niveau du onchange que ca se passe mal car une fois le traitement fait il doit surement remettre l'affaire au premier choix dans $_POST (on le voit à l'affichage) et du coup moi je crois que parce le traitement php est encore sur le choix 3, systématiquement au niveau de $_POST je suis a 0 et à partir de là choisir 0 fait repondre a onchange ==> FAUX il ne retransmet pas à la partie php $_POST et meme d'ailleurs ne la relance pas du tout le code php et on en reste à l'affichage non rafraichie precedant
 
:(

Reply

Marsh Posté le 26-01-2015 à 16:03:27    

Si $_POST["place1"] n'est pas défini, on passe dans ton if :
$cvm reçoit 0
$cvm est mis dans $_POST["place1"].  
 
Puis, quoi qu'il arrive, $cvm=$_POST["place1"]; Ca écrase le contenu de $cvm.
 
Si l'affectation ne se fait pas parce que $_POST est en lecture seule, $cvm aurait comme valeur null. Or, tu dis que $cvm contient 0 après être passé dans le if. Donc, l'affectation fonctionne ou alors, t'as un pb d'affichage.
Quand tu fait un var_dump($cvm) après $cvm=$_POST["place1"], t'as quoi d'affiché ? "0" ou autre chose ?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 26-01-2015 à 18:02:46    

string(1) "0"

Reply

Marsh Posté le 27-01-2015 à 10:32:44    

ca a l'air de correspondre à ce que tu attendais, c'est conforme aussi aux echo semble t'il
 
mais le choix 0 ne fonctionne que dans le cas du premier chargement, on peut pas le reprendre ensuite et mon affichage semble montrer que le script php n'est dans ce cas pas du tout executé

Reply

Marsh Posté le 29-01-2015 à 10:13:03    

rufo on doit bien pouvoir forcer la combo liste sur $cvm, non?
 
est ce qu'en fin de script php je peux mettre  un truc un peu de ce genre?? (j'ai mal du ecrire ma ligne et c'est peut etre pas value qu'il faudrait prendre)  :heink:  
 
echo "<SCRIPT>document.getElementById('place1').value=".$cvm.";</SCRIPT>";

Reply

Marsh Posté le 29-01-2015 à 10:20:33    

En php tu ajoutes selected="selected" dans le option que tu veux selectionner, il faut donc que tu passes par une boucle for et tu vérifie si ta value correspond à cvm


---------------
D3
Reply

Marsh Posté le 29-01-2015 à 10:23:45    

tintin34 a écrit :

rufo on doit bien pouvoir forcer la combo liste sur $cvm, non?
 
est ce qu'en fin de script php je peux mettre  un truc un peu de ce genre?? (j'ai mal du ecrire ma ligne et c'est peut etre pas value qu'il faudrait prendre)  :heink:  
 
echo "<SCRIPT>document.getElementById('place1').value=".$cvm.";</SCRIPT>";


 
Tu peux aussi fermer tes balises php et l'ecrire directement en JS

Code :
  1. <script type="text/javascript">
  2. document.getElementById('place1').value= '<?php echo $cvm;?>';
  3. </script>


 
Enfin ça marchera, mais autant te faire une fonction qui génère des input de type select et qui se positionne ( selected ) automatiquement sur celui reçu en parametre
 
typiquement
 

Code :
  1. echo GUI_createSelect( monTableauDeDonnees, maValeurSelectionnee, monNomEtIdDeTableau, + tout un tas de parametres )


 
par exemple

Reply

Marsh Posté le 29-01-2015 à 10:39:04    

ok merci je vais essayer de mettre en place quelque chose du genre :)

Reply

Marsh Posté le 30-01-2015 à 15:37:23    

FYI: dans ton snippet initial, il indiquait que 15h12 était "avant 15h" parce que tu as comparé avec "<=" au lieu de "<".
 


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed