Créer un évennement à partir d' un moment défini.

Apollo27 Messages postés 22 Date d'inscription vendredi 30 janvier 2015 Statut Membre Dernière intervention 17 mai 2015 - 17 mai 2015 à 10:11
blackduck Messages postés 817 Date d'inscription mercredi 20 février 2013 Statut Membre Dernière intervention 24 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.

2 réponses

blackduck Messages postés 817 Date d'inscription mercredi 20 février 2013 Statut Membre Dernière intervention 24 novembre 2018
Modifié par kyser soze le 25/05/2015 à 18:13
Salut,

(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.


$diff= $DateNow -> diff($DateEvenement);

if($diff->format() <0)


Résolu? ===> [RESOLU]
0
blackduck Messages postés 817 Date d'inscription mercredi 20 février 2013 Statut Membre Dernière intervention 24 novembre 2018
26 mai 2015 à 11:41
Re,

J'ai regardé ton code, je pense que comme cela il doit avoir le comportement que tu cherchais :
<?php
$DateEvenement = new DateTime("tomorrow",new DateTimezone("Europe/Paris"));//demain, zéro heures
$DateNow = new DateTime("now",new DateTimezone("Europe/Paris"));//aujourd'hui

$TempsRestant = $DateEvenement->diff($DateNow);

echo $DateEvenement->format('y-m-d H:i:s')."<br>";
echo $DateNow->format('y-m-d H:i:s')."<br>";

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.

0
Rejoignez-nous