Page 1 sur 2

affiche une message par heure et par jour

Posté : 10 sept. 2011, 03:32
par julie
Bonjour,

voila j'ai un problème j'ai un code php qui affiche un message tous les jours de la semaine à certaine heure de la journèe, le problème c'est que le week end donc le samedi et dimanche je ne veux pas que ces message s'affiche. que modifier dans cette fonction :

<?php
// récupère l'heure courante
$heure = date("H:i");

if ($heure >= '00' AND $heure <= '13:59') echo 'Prochaine vidéo publié à 16h00';
if ($heure >= '14' AND $heure <= '14:29') echo 'Prochaine vidéo publié à 16h30';
if ($heure >= '14:30' AND $heure <= '14:59') echo 'Prochaine vidéo publié à 17h00';
if ($heure >= '15' AND $heure <= '15:29') echo 'Prochaine vidéo publié à 17h30';
if ($heure >= '15:30' AND $heure <= '15:59') echo 'Prochaine vidéo publié à 18h00';
if ($heure >= '16' AND $heure <= '16:29') echo 'Prochaine vidéo publié à 18h30';
if ($heure >= '16:30' AND $heure <= '16:59') echo 'Prochaine vidéo publié à 19h00';
if ($heure >= '17' AND $heure <= '17:29') echo 'Prochaine vidéo publié à 19h30';
if ($heure >= '17:30' AND $heure <= '17:59') echo 'Prochaine vidéo publié à 20h00';
if ($heure >= '18:00' AND $heure <= '23:59') echo 'Bonbuzz et bonne soirée, rendez-vous demain à 16h...';

?>

Re: affiche une message par heure et par jour

Posté : 10 sept. 2011, 05:47
par AB
En admettant que tu aies une date au format "date" (ou au format "datetime")

$date = '2010-06-12';// 12 juin 2010

function Date_fr($date)
	{
	   setlocale(LC_TIME, 'french');
	   return strftime('%a', strtotime($date));
	}

$jour = Date_fr($date); //echo $date (-> sam.)

// et donc
if (!(strrpos($jour,'sam.') === 0 || strrpos($jour,'dim.') === 0)) 
{
   echo 'on peut afficher les infos car la date est différente de samedi ou dimanche';
}
else
{
   echo 'on est samedi ou dimanche -> jours de censure ';
}
Y'a peut-être moyen de faire autrement mais c'est la première solution (fonctionnelle) qui me vient à cette heure tardive :)

Re: affiche une message par heure et par jour

Posté : 10 sept. 2011, 09:13
par sirakawa
Peut-être que cette expression
((date('w') != 6) and (date('w') != 0))
tirée de la lecture de la documentation super utile et accessible à http://fr2.php.net/manual/fr/function.date.php

Re: affiche une message par heure et par jour

Posté : 10 sept. 2011, 14:41
par julie
Bonjour,

Je suis vraiment débutant , je suis sur wordpress. Je dois mettre un code dans le fichier function.php et un sur la page index.php ?

On ne peut pas faire comme le code que j'ai citer en l'insérant direct sur ma page index il reprend direct les function de lheure installer dans wordpress.

Re: affiche une message par heure et par jour

Posté : 10 sept. 2011, 14:47
par Invité
Ou plus simple ne rien ecrire le samedi et le dimanche, on ne peut pas mettre ce code php dans un autre code php qui di si samedi ou dimanche ne pas prendre en compte cette info.

Re: affiche une message par heure et par jour

Posté : 10 sept. 2011, 14:58
par Invité
j'ai trouvé ca, avec ce code je peux ecrire pas de video le week end, à lundi et bon weekend mais le problème c'est comment ne plus afficher les horraires des videos dans le code cité plus haut le weekend ?

<?php
// récupère l'heure courante
$heure = date("H:i");

if ($heure >= '00' AND $heure <= '13:59') echo 'Prochaine vidéo publié à 16h00';
if ($heure >= '14' AND $heure <= '14:29') echo 'Prochaine vidéo publié à 16h30';
if ($heure >= '14:30' AND $heure <= '14:59') echo 'Prochaine vidéo publié à 17h00';
if ($heure >= '15' AND $heure <= '15:29') echo 'Prochaine vidéo publié à 17h30';
if ($heure >= '15:30' AND $heure <= '15:59') echo 'Prochaine vidéo publié à 18h00';
if ($heure >= '16' AND $heure <= '16:29') echo 'Prochaine vidéo publié à 18h30';
if ($heure >= '16:30' AND $heure <= '16:59') echo 'Prochaine vidéo publié à 19h00';
if ($heure >= '17' AND $heure <= '17:29') echo 'Prochaine vidéo publié à 19h30';
if ($heure >= '17:30' AND $heure <= '17:59') echo 'Prochaine vidéo publié à 20h00';
if ($heure >= '18:00' AND $heure <= '23:59') echo 'Bonbuzz et bonne soirée, rendez-vous demain à 16h...';

?>

Re: affiche une message par heure et par jour

Posté : 10 sept. 2011, 16:00
par sam12
as-tu essayé les idées précédentes au moins?

Re: affiche une message par heure et par jour

Posté : 10 sept. 2011, 20:11
par AB
Peut-être que cette expression
((date('w') != 6) and (date('w') != 0))
tirée de la lecture de la documentation super utile et accessible à http://fr2.php.net/manual/fr/function.date.php
oui ça a bien l'air d'être le plus simple :wink:

Par contre évites d'utiliser "and" et "or" (sauf à le justifier explicitement) car cela peut prêter à confusion par rapport à l'utilisation de '&&' et '||'.

Par exemple nous sommes aujourd'hui samedi donc date('w') = 6
$d = date('w') != 0 and date('w') != 6 ; echo 'd = '.$d.'<br />';
if ($d) echo 'jour différent de samedi ou dimanche <br />';
// affiche : jour différent de samedi ou dimanche 

$d = date('w') != 0 && date('w') != 6 ; echo 'd = '.$d.'<br />';
if ($d) echo 'jour différent de samedi ou dimanche <br />';
//n'affiche rien (bon résultat)
L'expression que tu donne en exemple fonctionne s'il n'y a pas d'affectation préalable de la condition à une variable, par contre on ne peut pas affecter la condition à une variable pour ensuite l'évaluer sinon le résultat est faux. Cette différence n'existe pas en utilisant '&&' et '||'.

Plus d'infos à ce sujet ici

Re: affiche une message par heure et par jour

Posté : 11 sept. 2011, 01:02
par Invité
Pardon c 'est ce code que je vouslais cité :

<?php
$heure_ouverture = 8; //sert à afficher le script à partir de 9h et non 8h
$heure_fermeture = 20;//sert à afficher le script à partir de 21h
$temps = time();
$heure_actuelle = date('H', $temps);
$jour_actuel = date('w', $temps);
$planning_des_fermetures = array (0,6);//dans ce tableau on sélectionne les jours de 0 à 6 (lundi au vendredi)

if ((in_array($jour_actuel, $planning_des_fermetures)) //la fonction in_array() est très importante car elle seul peut chercher des entier
or ($heure_actuelle <= $heure_ouverture)
or ($heure_actuelle >= $heure_fermeture))
{
echo "C'est fermé ! ";
} else {
echo "C'est ouvert";
}
?>

Re: affiche une message par heure et par jour

Posté : 11 sept. 2011, 05:57
par AB
Tes deux derniers commentaires sont erronés et ne correspondent pas au code qui précède. Je te les corrige car je ne vois pas comment tu peux faire du code qui fonctionne si tu ne sais pas à quoi il correspond.
$planning_des_fermetures = array (0,6);//dans ce tableau on sélectionne les jours de 0 à 6 (lundi au vendredi) (FAUX)

$planning_des_fermetures = array (0,6);//dans ce tableau on indique les jours de fermeture qui correspondent à 0 (pour dimanche) et 6 (pour samedi).

if ((in_array($jour_actuel, $planning_des_fermetures)) //la fonction in_array() est très importante car elle seul peut chercher des entier (FAUX)

if (in_array($jour_actuel, $planning_des_fermetures)) // Cherche si la variable $jour_actuel correspond à une valeur du tableau $planning_des_fermetures.

//Donc la fin de ton code pourrait ressembler à ceci
if (!(in_array($jour_actuel, $planning_des_fermetures) || $heure_actuelle < $heure_ouverture || $heure_actuelle >= $heure_fermeture))
{
$heure = date("H:i");

if ($heure >= '00' && $heure <= '13:59') echo 'Prochaine vidéo publié à 16h00';
if ($heure >= '14'  && $heure <= '14:29') echo 'Prochaine vidéo publié à 16h30';
if ($heure >= '14:30' && $heure <= '14:59') echo 'Prochaine vidéo publié à 17h00';
if ($heure >= '15' && $heure <= '15:29') echo 'Prochaine vidéo publié à 17h30';
if ($heure >= '15:30' && $heure <= '15:59') echo 'Prochaine vidéo publié à 18h00';
if ($heure >= '16' && $heure <= '16:29') echo 'Prochaine vidéo publié à 18h30';
if ($heure >= '16:30' && $heure <= '16:59') echo 'Prochaine vidéo publié à 19h00';
if ($heure >= '17' && $heure <= '17:29') echo 'Prochaine vidéo publié à 19h30';
if ($heure >= '17:30' && $heure <= '17:59') echo 'Prochaine vidéo publié à 20h00';
if ($heure >= '18:00' && $heure <= '23:59') echo 'Bonbuzz et bonne soirée, rendez-vous demain à 16h...';
}
else
{
echo c'est fermé;
}
Note : le point d'exclamation devant la seconde parenthèse if (!( signifie que l'on souhaite le contraire des conditions inclue dans la seconde parenthèse (qui indique les horaires de fermeture).

On pourrait écrire l'équivalent en faisant :
if (!in_array($jour_actuel, $planning_des_fermetures) && $heure_actuelle >= $heure_ouverture && $heure_actuelle < $heure_fermeture)
{
// code à écrire quand c'est ouvert ...
}
else
{
echo "c'est fermé";
}
ou encore
if (in_array($jour_actuel, $planning_des_fermetures) || $heure_actuelle < $heure_ouverture || $heure_actuelle >= $heure_fermeture)
{
echo "c'est fermé";
}
else
{
// code à écrire quand c'est ouvert ...
}

Re: affiche une message par heure et par jour

Posté : 11 sept. 2011, 09:24
par sirakawa
L'expression
((date('w') != 6) and (date('w') != 0))
est INTENTIONNELLEMENT parenthésée pour éviter toute erreur d'interprétation, quel que soit le langage.
Un véritable plus serait ce qu'offrent certains langages :
un AND qui n'évalue pas la suite de l'expression quand la première partie a rendu FALSE, puisque cette évaluation est inutile
un OR qui n'évalue la suite de l'expression que quand le début vaut FALSE puisque si le débu est true, le reste n'importe pas...
en effet :
<?PHP
$u=0;
$d = (($u != 0) and ($u != 6 ));
echo 'd = '.$d.'<br />';
if ($d) echo 'jour différent de samedi ou dimanche <br />';
$u = 6;
$d = (($u != 0) and ($u != 6 ));
echo 'd = '.$d.'<br />';
if ($d) echo 'jour différent de samedi ou dimanche <br />';
$u = 3;
$d = (($u != 0) and ($u != 6 ));
echo 'd = '.$d.'<br />';
if ($d) echo 'jour différent de samedi ou dimanche <br />';
?>
donne un résultat parfaitement stable, et il n'y a pas d'histoires de priorités quand il y a un seul opérateur...
En revanche le code déparenthésé produit des résultats incorrects suivant la valeur de $u:
exemples
$u =0;
$d = $u != 0 and $u != 6 ;
$u!=0
$d devient FALSE mais l'affectation renvoie un résultat TRUE avec lequel se fait le and avec $u !=6 qui renvoie TRUE
résultat TRUE exact un peu par hasard

$u =6;
$d = $u != 0 and $u != 6 ;
$d devient TRUE et l'affectation renvoie un résultat TRUE avec lequel se fait le and avec $u !=6 qui renvoie FALSE
résultat FALSE

si $u=3
$d devient TRUE et l'affectation renvoie un résultat TRUE avec lequel se fait le and avec $u !=6 qui renvoie TRUE
résultat TRUE

Re: affiche une message par heure et par jour

Posté : 11 sept. 2011, 12:32
par Ryle
Un véritable plus serait ce qu'offrent certains langages :
un AND qui n'évalue pas la suite de l'expression quand la première partie a rendu FALSE, puisque cette évaluation est inutile
un OR qui n'évalue la suite de l'expression que quand le début vaut FALSE puisque si le débu est true, le reste n'importe pas...
Il me semble pourtant que c'est ce que fait php. Cependant il convient d'utiliser les bons opérateurs : && et || et non pas AND et OR dont la précédence (priorité d'exécution) est inférieure à celle des opérateurs d'affectation.
http://php.net/manual/fr/language.opera ... edence.php

En PHP, je vous recommande d'utiliser uniquement les opérateurs && et ||. N'utilisez AND et OR que si vous êtes capables de justifier leur emploi à la place des deux opérateurs précédents :)

Nota : en SQL en revanche, il convient bien d'utiliser AND et OR pour séparer les prédicats... mais c'est un autre langage ;)

Re: affiche une message par heure et par jour

Posté : 11 sept. 2011, 12:47
par euka
Bonjours,
Moi, je propose un code plus simple (??) :
<?php
// récupère l'heure courante
$heure = date("H:i");
$jour = date('N'); // Renvoie 1 pour lundi, 2 pour mardi etc...

if ($jour < 6) // 6 = Samedi et 7 = dimache ! donc si on est pas samedi et dimanche alors, faire ça :
{

if ($heure >= '00' AND $heure <= '13:59') echo 'Prochaine vidéo publié à 16h00';
if ($heure >= '14' AND $heure <= '14:29') echo 'Prochaine vidéo publié à 16h30';
if ($heure >= '14:30' AND $heure <= '14:59') echo 'Prochaine vidéo publié à 17h00';
if ($heure >= '15' AND $heure <= '15:29') echo 'Prochaine vidéo publié à 17h30';
if ($heure >= '15:30' AND $heure <= '15:59') echo 'Prochaine vidéo publié à 18h00';
if ($heure >= '16' AND $heure <= '16:29') echo 'Prochaine vidéo publié à 18h30';
if ($heure >= '16:30' AND $heure <= '16:59') echo 'Prochaine vidéo publié à 19h00';
if ($heure >= '17' AND $heure <= '17:29') echo 'Prochaine vidéo publié à 19h30';
if ($heure >= '17:30' AND $heure <= '17:59') echo 'Prochaine vidéo publié à 20h00';
if ($heure >= '18:00' AND $heure <= '23:59') echo 'Bonbuzz et bonne soirée, rendez-vous demain à 16h...';

}

?>

Re: affiche une message par heure et par jour

Posté : 11 sept. 2011, 14:12
par Invité
Eucka tu as trouvé ce que je demandais mais rien ne s'affiche je voudrais ecrire "Bon weekend à lundi ..."

Je dois crée echo c'est ca ?

Re: affiche une message par heure et par jour

Posté : 11 sept. 2011, 14:16
par Julie
Merci à tout le monde c'est super sympa de me donner un petit coup de main, AB j essai de comprendre ton code je essayer de m'en servir aussi comme celui de euka.