affiche une message par heure et par jour

julie
Invité n'ayant pas de compte PHPfrance

10 sept. 2011, 03:32

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...';

?>

ViPHP
AB
ViPHP | 5818 Messages

10 sept. 2011, 05:47

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 :)

Mammouth du PHP | 2278 Messages

10 sept. 2011, 09:13

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
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

julie
Invité n'ayant pas de compte PHPfrance

10 sept. 2011, 14:41

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.

Invité
Invité n'ayant pas de compte PHPfrance

10 sept. 2011, 14:47

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.

Invité
Invité n'ayant pas de compte PHPfrance

10 sept. 2011, 14:58

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...';

?>

Eléphant du PHP | 343 Messages

10 sept. 2011, 16:00

as-tu essayé les idées précédentes au moins?
Développeur web

ViPHP
AB
ViPHP | 5818 Messages

10 sept. 2011, 20:11

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

Invité
Invité n'ayant pas de compte PHPfrance

11 sept. 2011, 01:02

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";
}
?>

ViPHP
AB
ViPHP | 5818 Messages

11 sept. 2011, 05:57

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

Mammouth du PHP | 2278 Messages

11 sept. 2011, 09:24

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
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

11 sept. 2011, 12:32

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 ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 2 Messages

11 sept. 2011, 12:47

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...';

}

?>

Invité
Invité n'ayant pas de compte PHPfrance

11 sept. 2011, 14:12

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 ?

Julie
Invité n'ayant pas de compte PHPfrance

11 sept. 2011, 14:16

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.