Compte a rebours jusqu a un jour défini de la semaine [Résolu]

Signaler
Messages postés
115
Date d'inscription
mardi 9 novembre 2010
Statut
Membre
Dernière intervention
18 mai 2016
-
Messages postés
115
Date d'inscription
mardi 9 novembre 2010
Statut
Membre
Dernière intervention
18 mai 2016
-
Bonjour,
j'essaye d'afficher la durée qui reste jusqu'à un jour défini de la semaine avec un script php mais à chaque fois j'ai des erreurs différentes

- dans le cas ou le jour n'est pas encore arrivé, je n'ai pas le chiffre exacte j'ai un jour de plus (l'exemple pour demain m'affiche en ce moment 1 jour, 20 heures, 1 minute et 5 s alors qu il devrait etre 0 jour, 19 heures, 1 minute et 5 s.

- Si on est dans le jour demandé, j'ai un affichage négatif l'exemple d aujourd'hui m affiche : Il reste : -0 jour, -4 heure, -1 minute et -59 s. alors qu'il devrait m'afficher le tps restant pour Lundi prochain.

voila mon code :
<?php
function AuPluriel($chiffre) {
    if($chiffre>1) {
        return 's';
    };
}
//récupère le temps du jour en seconde (à partir du temps 0 du calendrier :1 janvier 1970)
$jour=time();
// initialise à 0 le nombre de jours
$nb=0;
//date("l",$jour) donne le nom du jour
while (date("l",$jour)!="Monday")
{
// ajouter 1 au nombre de jours
$nb++;
//passer au jour suivant (60*60*24 secondes par jour)
$jour=$jour+60*60*24;
}
$j=date("j")+$nb;
$m = date("m");
$annee = date('Y');
$sun = mktime(0, 0, 1, $m, $j, $annee);

$tps_restant = $sun - time(); 

//============ CONVERSIONS

$i_restantes = round($tps_restant / 60);
$H_restantes = round($i_restantes / 60);
$d_restants = round($H_restantes / 24);


$s_restantes = floor($tps_restant % 60); // Secondes restantes
$i_restantes = floor($i_restantes % 60); // Minutes restantes
$H_restantes = floor($H_restantes % 24); // Heures restantes
$d_restants = floor($d_restants); // Jours restants
//==================
//setlocale(LC_TIME, 'fr', 'fr_FR', 'fr_FR.ISO8859-1');
setlocale(LC_ALL, 'fr_FR');

echo 'Il reste : <strong>'. $d_restants .' jour'.AuPluriel($d_restants).'</strong>, <strong>'. $H_restantes .' heure'.AuPluriel($H_restantes).'</strong>,'
   . ' <strong>'. $i_restantes .' minute'.AuPluriel($i_restantes).'</strong> et <strong>'. $s_restantes .' s</strong>.';

?>

Merci de m'aider.

3 réponses

Messages postés
32478
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 mai 2021
347
Bonjour,

<?php
function dateDiff($date1, $date2){
    $diff = abs($date1 - $date2); // abs pour avoir la valeur absolute, ainsi éviter d'avoir une différence négative
    $retour = array();
 
    $tmp = $diff;
    $retour['second'] = $tmp % 60;
 
    $tmp = floor( ($tmp - $retour['second']) /60 );
    $retour['minute'] = $tmp % 60;
 
    $tmp = floor( ($tmp - $retour['minute'])/60 );
    $retour['hour'] = $tmp % 24;
 
    $tmp = floor( ($tmp - $retour['hour'])  /24 );
    $retour['day'] = $tmp;
 
    return $retour;
}
 
 
$now = time();
$nextM = strtotime('next monday'); 
$tps_restant = dateDiff($nextM,$now) ;
echo "<br>";
Echo "Il reste : " .$tps_restant['day'] ." jours " .$tps_restant['hour'] ." Heures " .$tps_restant['minute'] ." minutes " .$tps_restant['second'] ." secondes " ;
?>

Messages postés
32478
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 mai 2021
347
Bonjour,

quelque chose du genre devrait pouvoir fonctionner :
$now = time();
$nextM = strtotime('next monday'); 
$tps_restant = $nextM - $now ;

echo floor($tps_restant/(60*60*24));


A adapter à tes besoins bien entendu.

Messages postés
115
Date d'inscription
mardi 9 novembre 2010
Statut
Membre
Dernière intervention
18 mai 2016

Merci beaucoup Jordan, Tu me sauves encore une fois
mille merci