Apollo27
Messages postés22Date d'inscriptionvendredi 30 janvier 2015StatutMembreDernière intervention17 mai 2015
-
17 mai 2015 à 10:11
blackduck
Messages postés817Date d'inscriptionmercredi 20 février 2013StatutMembreDernière intervention24 novembre 2018
-
26 mai 2015 à 11:41
Bonjour,
Ayant pour projet de créer un jeu dont il ne serait plus possible de jouer après minuit, j'ai trouvé ces codes me permettant de définir un évènement à partir de cette heure fatidique:
<?php $DateEvenement = new DateTime("tomorrow +2h",new DateTimezone("Europe/Paris"));//demain, zéro heures $DateNow = new DateTime("now",new DateTimezone("Europe/Paris"));//aujourd'hui $TempsRestant = $DateNow->diff($DateEvenement); printf("Il reste %s jour %s heures %s minutes %s secondes avant minuit pour jouer.", $TempsRestant->d, $TempsRestant->h,$TempsRestant->i,$TempsRestant->s); if ($DateNow -> diff($DateEvenement)<0) { echo "on autorise les entrées en base de données"; } else echo "trop tard pour jouer";
?>
Passé ce délais j'aimerai que les résultats du jeu ne soient plus entrés en base de données et qu'un message apparait pour prévenir le joueur qu'il est trop tard pour jouer.
J'ai pensé utiliser une condition if qui autoriserait l'inscription de la réponse dans la base avant minuit.
Mais cela ne fonctionne pas puisque la date de minuit n'est pas encore atteinte et il est indiqué le message "trop tard pour jouer".
Voici ce qui m'est retourné:
Un petit coup de pouce serait le bienvenu .
Merci.
(Mofication excuse moi je n'ai pas répondu à ta question, je me suis focalisé sur l'erreur, je reviens vers toi plus tard)
Lorsque tu utilises la fonction diff le retour est un objet DateInterval, il ne peut être comparer avec un int directement, je te conseille d'utiliser la fonction diff juste avavnt ton if, de récupérer le retour dans un objet DateInterval et d'utiliser la fonction format qui retourne un string auquel tu pourra comparer 0.
printf("Il reste %s jour %s heures %s minutes %s secondes avant minuit pour jouer.<br>", $TempsRestant->d, $TempsRestant->h,$TempsRestant->i,$TempsRestant->s); $diff=$DateNow -> diff($DateEvenement);
if ($diff->format('%d') <= 0 && $diff->format('%H')<=0 && $diff->format('%i')<=0 && $diff->format('%s')<=0){ echo "trop tard pour jouer"; }else{ echo "on autorise les entrées en base de données"; }
?>
Cependant je trouve le fonctionnement étrange, tu n'auras jamais le message "trop tard pour jouer" car par exemple : à 23h59:59sec du jour j le message te dirais qu'il reste 1 sec pour jouer, mais lorsque tu passera à minuit et 1 seconde cette ligne la
$DateEvenement = new DateTime("tomorrow",new DateTimezone("Europe/Paris"))
prendra la valeur de J+1 donc ton compteur se remettra à dire qu'il reste 23:59:59seconde pour jouer..
Au passage le "tomorow+2h" ne rajoute pas 2heures chez moi mais retourne bien la date du lendemain à 00h00.