Convertir seconde en H:Min:Sec

Eléphant du PHP | 223 Messages

27 avr. 2010, 17:24

Bonjour

tous est dans le sujet
comment convertir se compte a rebours qui affiche que les seconde en H:min:sec
merci

Code : Tout sélectionner

<?php $datas= "Apr 30 16:00:00 2010" ; ?> <script type="text/javascript"> function rebours(id) { var el = document.getElementById(id), datedujour = <?php echo time(); ?>; var date_even = new Date("<?php echo ($datas); ?>"); setInterval(function() { datedujour++; el.innerHTML = 'Il reste ' + (date_even.getTime() / 1000 - datedujour) + ' secondes'; }, 1000); } window.onload=function(){ rebours('id_du_div'); }; </script> <div id="id_du_div"></div> </body>

ViPHP
ViPHP | 3607 Messages

27 avr. 2010, 18:43

Et bien il s'agit simplement de maths :)

Combien y a-t-il de secondes dans une minute? dans une heure?

Tu peux commencer par convertir tes secondes en heure, il y aura un reste à la division (ou pas si on est à l'heure pile ;) ), tu convertis ce reste en minute, et le reste de ton opération te donnera les secondes restantes :)

Eléphant du PHP | 223 Messages

27 avr. 2010, 19:39

je sais mais je n'arrive pas un petit indice
svp
Modifié en dernier par hashut le 28 avr. 2010, 08:21, modifié 1 fois.

Mammouth du PHP | 661 Messages

27 avr. 2010, 20:30

var secondes = date_even.getTime() / 1000 ;

var days = Math.floor(secondes / 86400);
secondes = secondes - (days*86400);

var hour = Math.floor(secondes / 3600);
secondes = secondes - (hour*3600);

...
...

@++

Eléphant du PHP | 223 Messages

28 avr. 2010, 08:21

Merci pour l'indice je fait teste sa se matin

merci merci

Eléphant du PHP | 223 Messages

28 avr. 2010, 17:01

cela fait 6h que je me bat je n'arrive pas
bordel je suis vraiment nul en java
Help svp

Eléphant du PHP | 223 Messages

29 avr. 2010, 18:49

voila trouver mais plus dynamique donc je fait cree un autre sujet

Code : Tout sélectionner

<?php $db = mysql_connect('localhost','root','root'); mysql_select_db('test' ,$db); $req_att = "SELECT heure_fin FROM date " ; $req = mysql_query($req_att) OR die('erreur dans la requete pour savoir l\'attaque continu'); while($data = mysql_fetch_array($req)) { $hf= $data['heure_fin']; } $mois="Apr"; $jour="30"; $annee="2010"; $datas= "$mois $jour $hf $annee" ; echo"$datas"; ?> <script type="text/javascript"> function rebours(id) { var el = document.getElementById(id), datedujour = <?php echo time(); ?>; var date_even = new Date("<?php echo ($datas); ?>"); var sec=(date_even.getTime() / 1000 - datedujour); var n = 24 * 3600; j = Math.floor (sec / n); h = Math.floor ((sec - (j * n)) / 3600); mn = Math.floor ((sec - ((j * n + h * 3600))) / 60); sec = Math.floor (sec - ((j * n + h * 3600 + mn * 60))); if (sec > 0) { setInterval(function() { datedujour++; el.innerHTML = 'Il reste ' + j +'j'+ h +'h'+ mn +'m'+ sec +'s'; }, 1000); }else{ el.innerHTML = "Temps Termin&eacute;s"; } } window.onload=function(){ rebours('id_du_div'); }; </script> <div id="id_du_div"></div> </body>

ViPHP
AB
ViPHP | 5818 Messages

29 avr. 2010, 19:44

C'est pas la bonne méthode, déjà parce que quand tu fais un setInterval ... 1000 ça ne donnera pas une seconde avant de déclencher la fonction mais un temps d' à peu près une seconde et cela peut varier beaucoup entre les différents navigateurs.

Récapitulons : Tu as une date de fin générée en php et un compte à rebour à faire en javascript.

1-verif / Déjà pour que cela fonctionne il faudrait s'assurer que la date-heure actuelle générée par le serveur soit à peu de chose près la même que celle trouvée sur le navigateur en javascript.

Si oui tu met la date de fin générée en php dans une variable javascript si elle n'est pas déjà été crée en début de script

Code : Tout sélectionner

if (typeof fin == 'undefined') var fin = '<?php echo $date_fin?>';
ensuite c'est cette variable javascript "fin" que tu passeras en paramètre dans ta fonction rebour pour pouvoir la récupérer en js dans ta boucle.

Elle doit donc être indiquée à la fois dans ta fonction rebour

Code : Tout sélectionner

function rebours(id,fin)) { ...
et comme paramètre dans setInterval

Code : Tout sélectionner

setInterval(function(){rebours(id,fin);},1000);
Et donc il te reste à faire la soustraction des deux dates : date-originelle php enregistrée dans la vrariable js 'fin' - date instantanée trouvée en javascript et de convertir le tout en secondes.

Si 1-verif/ n'est pas bon tu n'affiche pas de compte à rebour mais simplement un message indiquant la date de fin.

Eléphant du PHP | 223 Messages

30 avr. 2010, 15:04

ou j'ai pas compris ou sa marche pas toujours compte rebour pas dynamique

Mammouth du PHP | 672 Messages

30 avr. 2010, 15:12

Bonjour.

Question stupide : tu as de quoi déboguer le JS ? (au minimum, sous FF tu dois installer l'extension Web Developper et/ou Firebug)

Eléphant du PHP | 223 Messages

30 avr. 2010, 15:23

je suis sous mac ??

Eléphant du PHP | 223 Messages

30 avr. 2010, 15:41

je comprend pas pk quand je sur en millisecondes sa marche nickel
et quand je formate en heure minutes secondes sa marche plus
je devins fou

Eléphant du PHP | 223 Messages

11 mai 2010, 17:35

voici le code
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
include('../conf/conf.php');
$db = mysql_connect($serveur, $user, $passw);
mysql_select_db($bd_base ,$db);
$id=1;
/////////////////////////////////////////////
$req_att = "SELECT  h_fin, DAY(h_fin) AS jour, MONTH(h_fin) AS mois, YEAR(h_fin) AS annee, HOUR(h_fin) AS heure, MINUTE(h_fin) AS minute, SECOND(h_fin) AS seconde  FROM Objet where id =$id" ;
$req = mysql_query($req_att) OR die('erreur dans la requete pour savoir l\'attaque continu');
while($data = mysql_fetch_array($req)) 
{ 
$jour= $data['jour'];
$mois= $data['mois'];
$heure= $data['heure'];
$minute= $data['minute'];
$seconde= $data['seconde'];
$annee= $data['annee'];

}
	$targetYear  = $annee ;
	$targetMonth = $mois ;
	$targetDay   = $jour ;
	$targetHour  = $heure ;
	$targetMinute = $minute ;
	$targetSecond = $seconde ;

$dateFormat = "Y-m-d H:i:s";
$targetDate = mktime($targetHour,$targetMinute,$targetSecond,$targetMonth,$targetDay,$targetYear);

$actualDate = time();
$secondsDiff = $targetDate - $actualDate;
$remainingDay     = floor($secondsDiff/60/60/24);
$remainingHour    = floor(($secondsDiff-($remainingDay*60*60*24))/60/60);
$remainingMinutes = floor(($secondsDiff-($remainingDay*60*60*24)-($remainingHour*60*60))/60);
$remainingSeconds = floor(($secondsDiff-($remainingDay*60*60*24)-($remainingHour*60*60))-($remainingMinutes*60));
$targetDateDisplay = date($dateFormat,$targetDate);
$actualDateDisplay = date($dateFormat,$actualDate);

?>
<script type="text/javascript">
  var days = <?php echo $remainingDay; ?>  
  var hours = <?php echo $remainingHour; ?>  
  var minutes = <?php echo $remainingMinutes; ?>  
  var seconds = <?php echo $remainingSeconds; ?>  
function setCountDown ()
{
  seconds--;
  if (seconds < 0){
      minutes--;
      seconds = 59
  }
  if (minutes < 0){
      hours--;
      minutes = 59
  }
  if (hours < 0){
      days--;
      hours = 23
  }
/////////////////////////////

if( days < 0 ){
	document.getElementById("<?php echo $id ?>").innerHTML =" Termin&eacute;s";
 
}
else
{		
/////////////////////////////  
  document.getElementById("<?php echo $id ?>").innerHTML = days+":"+hours+":"+minutes+":"+seconds;
  
 /////////////////////////////////////////////////////////
}
 ///////////////////////////////////////// 
  setTimeout ( "setCountDown()", 1000 );
/////////////////////////////

//////////////////
}

</script>
</head>

<body onload="setCountDown();">
<div  id=<?php echo $id ?>><?php echo "$remainingDay days, $remainingHour hours, $remainingMinutes minutes, $remainingSeconds seconds";?></div>
<?php
/////////////////////////////
?>