IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Modification et amélioration boucles for


Sujet :

Langage PHP

  1. #21
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Re Mathieu

    Grâce à toi j'ai donc ajouté en haut tes deux lignes d'error_reporting et ça donne :

    Warning: strtotime() expects at most 2 parameters, 6 given in /srv/data/web/.../...xxxmok.php on line 40
    (En effet oupssssss j'ai un peu poussé lol ! )

    Or la ligne 40 comporte ce code :

    $we = strftime("%w", strtotime(0, 0, 0, 3, $i, 2021));
    (la fonction mktime plantant, je l'avais tout bêtement remplacée par strtotime, qui passait impec... oui je sais : pas taper )

    Au moins ça fait avancer le chmilblic quant à la ligne en question puisque cette fonction n'est pas adaptée en ce cas.

    Je continue à cherche ce qui pourrait m'être utile pour chercher en boucle l'offset/indice la détection des noms de jours de 1 à 7.

    @ suivre

    DS7

  2. #22
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut


    Whaouuuhhhhhhhhhhhhh en plus je l'avais déjà sous les yeux !

    Merci les copains, grâce à vos idées et conseils, m'en suis sorti !!!

    En boucle ça retourne effectivement l'indice du jour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $we = date('w', mktime(0, 0, 0, 3, $i, 2021));
    J'ai encore des réglage en ternaire, j'y retourne, mais le résultat est

    DS7

    Nom : DVPvict.gif
Affichages : 114
Taille : 15,4 Ko

  3. #23
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 848
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 848
    Points : 6 535
    Points
    6 535
    Par défaut
    À noter que pour les histoires de rendus sur tel ou tel item, cela peut se faire en pure css.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  4. #24
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    CosmoKnacki, oui je sais, mais comme ça sous code de tests, plus c'est clair et basique ; le seul but recherché, c'est que le principe fonctionne.

    Ensuite là, oui on modifie en compliquant un peu la sauce.

    En attendant j'en saute de joie

    Au plaisir

    DS7

  5. #25
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut Pas d'indice 7
    Oupsss, c'est pour cette raison que je n'arrivais pas à obtenir un résultat sur les dimanches.

    Voyez plutôt :
    Nom : DVPno7.gif
Affichages : 110
Taille : 10,9 Ko

    Curieux ça: le 7 est zappé !

    Bref, me reste à ruser en ternaire style doubler ce dernier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo strftime("%e </td><td width='80' bgcolor='Lavender'> %A", mktime(0, 0, 0, 3, $i, 2021)), '</td><td width="1080" bgcolor="color:'.($we == 6 ? "rgb(51,102,255);\"":"red\"").($we == 0 ? "rgb(51,102,255);\"":"red\"").'></td></tr>', PHP_EOL;
    Mais le second ne donne rien, mais au moins ça ne plante pas.

    Autrement dit puisque je ne peux pas faire un simple >=6 en ternaire, je sèche.

    A moins de faire un "6 or 0" mais ça passe pas !

    Pourquoi ce 7 (dimanche) ne passe pas en boucle ?

    Merci de vos idées,

    DS7

  6. #26
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Finalement m'en suis sorti en employant un str_replace(), pas très glorieux mais en tout cas c'est

    DS7

  7. #27
    Membre du Club
    Femme Profil pro
    particulier
    Inscrit en
    Juillet 2020
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : particulier

    Informations forums :
    Inscription : Juillet 2020
    Messages : 51
    Points : 59
    Points
    59
    Par défaut
    Que penses-tu de ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <?php
    setlocale(LC_TIME, 'fr_FR.UTF-8', 'fr_FR', 'fr', 'fra_fra'); // pour avoir le nom des jours en français
    $color = array('rgb(51, 102, 255)','Red','Lavender');
     
    $num_mois = 3 ; // numéro du mois à afficher
    $num_year = date('Y'); // numéro de l'année en cours
    $nb_jour = date('j',mktime(0,0,0,$num_mois +1,0,$num_year)); // nombre de jours du mois à afficher
     
    echo '
    <table border=1><caption><b>'.strtoupper (strftime("%B %Y", mktime(12,0,0,$num_mois,1,$num_year))).'</b></caption>';
     
    for ($i = 1; $i <= $nb_jour; $i++) {
        $stamp = mktime(12, 0, 0, $num_mois, $i,$num_year);
        $we = date('N',$stamp) > 5 ? 1 : 0;
        echo '
    <tr>
        <td width="30" bgcolor = "'.$color[2].'">'.$i.'</td>
        <td width="80" bgcolor = "'.$color[2].'">'. ucwords(strftime("%A", $stamp)). '</td>
        <td width="1080" bgcolor = '.$color[$we].'> &nbsp; </td>
    </tr>
        ';
    }
    echo '</table>';
    ?>
    Après tu peux ajouter du css et mettre des classes dans tes td.
    Tu peux aussi définir automatiquement le mois en cours comme je j'ai fais pour l'année en cours.

  8. #28
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Pas-douée

    Finalement je m'étais tout simplement appuyé sur l'indice zéro puisque le 1 ne passait pas.

    Merci pour ta contrib, je vais essayer d'en tirer encore plus d'idées à développer !

    Je crois même que grâce à ton idée, cela va me permettre de virer mon opérateur ternaine ne pouvant donner que deux valeurs/colors.

    Cela devrait me permettre de colorer en plus certains jours fériés.

    Ça fait plaisir de voir une femme au milieu de tant d'hommes


    DS7

    Edit : oupssss, quoiqu'en ayant un peu plongé le museau dans ton code : tu utilises également un ternaire

  9. #29
    Membre du Club
    Femme Profil pro
    particulier
    Inscrit en
    Juillet 2020
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : particulier

    Informations forums :
    Inscription : Juillet 2020
    Messages : 51
    Points : 59
    Points
    59
    Par défaut
    J'explique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $we = date('N',$stamp) > 5 ? 1 : 0;
    est équivalent à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $we = date('N',$stamp) > 5 ? 1 : 0;
    if(date('N',$stamp) > 5)
    {  $we = 1;}
    else
    {  $we = 0;}
    date('N',$stamp) donne le numéro du jour de la semaine, 1 = lundi et 7 = dimanche

    J'aurai pu faire $we = date('N',$stamp) > 5 ; mais en fonction du système, du langage, de la version et je ne sais quoi, il y a parfois des surprises entre les valeurs de false (<=0 ou 0 ou null) et true (1 ou != O ou > 0)

    Il est plus rapide d'aller lire une variable plusieurs fois que de refaire les même calculs.
    date('n') ne donne pas la même chose que date('N');

    Pour les jours fériés, il te faut remplir un tableau et comparer avec la date du jour.
    Dans le tableau j'utilise moisjour(avec le zéro pour le jour), exemple : 501 = 01/05 (et non Lewis).
    Attention aux jours fériés mobiles https://www.php.net/manual/fr/function.easter-days.php
    Pentecôte et Ascension sont toujours le même nombre fixe après Pâques.

    J'attends de voir ton code ...

  10. #30
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Voilà donc mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <?php
    	ini_set("display_errors", TRUE);
    	error_reporting(E_ALL);
     
    	/*
    		Formatage : mois (1 à 12) et jours (01 à 31)
    		
    		101    Vendredi 1er janvier 2021 : Nouvel An
    		405    Lundi 5 avril 2021        : Lundi de Pâques
    		501    Samedi 1er mai 2021       : Fête du travail
    		508    Samedi 8 mai 2021         : Armistice 1945
    		513    Jeudi 13 mai 2021         : Ascension
    		524    Lundi 24 mai 2021         : Lundi de Pentecôte
    		714    Mercredi 14 juillet 2021  : Fête nationale
    		815    Dimanche 15 août 2021     : Assomption
    		1101   Lundi 1er novembre 2021   : Toussaint
    		1111   Jeudi 11 novembre 2021    : Armistice 1918
    		1225   Samedi 25 décembre 2021   : Noël
    	
    		Soit 11 jours fériés
    	*/
     
    	$mois_jour = array('101','405','501','508','513','524','714','815','1101','1111','1225');
     
    	// https://www.developpez.net/forums/d2100110-nouveau/php/langage/modification-amelioration-boucles-for/
    	// Merci à "Très-Douée" ;-)
    	setlocale(LC_TIME, 'fr_FR.UTF-8', 'fr_FR', 'fr', 'fra_fra'); // pour avoir le nom des jours en français
     
     
    	$color = array('rgb(51, 102, 255)', 'Red', 'Lavender', 'yellow');
     
     
    	.../...

    Pour le reste, si tu me laisses plusieurs mois, certainement que je pourrais avancer et te rendre ma copie

    Mais malgré tes explications, pour l'instant en PHP, je ne vois pas comment manipuler autrement que par zéro ou un la variable $we sous array.

    DS7

  11. #31
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut


    J'ai peut-être trouvé une piste plus simple (?).

    Exemple basé sur mai 2021 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo date('N', $stamp); // 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1
    Les samedis en 6
    Les dimanches en 7
    Ensuite les autres jours de la semaine défilent

    Mon idée serait d'injecter sur le jour férié détecté par exemple un 8 et le tour serait joué ?

    Quelles pensées du forum ?

    @ +

    DS7

  12. #32
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Une sorte de recherche de principe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    <?php
    	ini_set("display_errors", TRUE);
    	error_reporting(E_ALL);
     
    	/*
    		Formatage : mois (1 à 12) et jours (01 à 31)
    		
    		101    Vendredi 1er janvier 2021 : Nouvel An
    		405    Lundi 5 avril 2021        : Lundi de Pâques
    		501    Samedi 1er mai 2021       : Fête du travail
    		508    Samedi 8 mai 2021         : Armistice 1945
    		513    Jeudi 13 mai 2021         : Ascension
    		524    Lundi 24 mai 2021         : Lundi de Pentecôte
    		714    Mercredi 14 juillet 2021  : Fête nationale
    		815    Dimanche 15 août 2021     : Assomption
    		1101   Lundi 1er novembre 2021   : Toussaint
    		1111   Jeudi 11 novembre 2021    : Armistice 1918
    		1225   Samedi 25 décembre 2021   : Noël
    	
    		Soit 11 jours fériés
    	*/
     
    	$mois_jour = array('101','405','501','508','513','524','714','815','1101','1111','1225');
     
     
    	// https://www.developpez.net/forums/d2100110-nouveau/php/langage/modification-amelioration-boucles-for/
    	// Merci à "Très-Douée" ;-)
    	setlocale(LC_TIME, 'fr_FR.UTF-8', 'fr_FR', 'fr', 'fra_fra'); // pour avoir le nom des jours en français
     
     
    	$color = array('rgb(51, 102, 255)', 'Red', 'Lavender', 'yellow', 'green', 'black', 'purple', 'pink');
     
    	$num_mois = 5 ; // numéro du mois à afficher
    	$num_year = date('Y'); // numéro de l'année en cours
    	$nb_jour  = date('j',mktime(0,0,0,$num_mois +1,0,$num_year)); // nombre de jours du mois à afficher
     
    	echo '
    	<table border=1><caption><b>'.strtoupper (strftime("%B %Y", mktime(12,0,0,$num_mois,1,$num_year))).'</b></caption>';
     
    	for ($i = 1; $i <= $nb_jour; $i++) 
    	{
    		$stamp = mktime(12, 0, 0, $num_mois, $i, $num_year);
    	///	$we = date('N', $stamp) > 5 ? 1 : 0; // 1 ou 0
     
    	$we = date('N', $stamp); // 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 
     
    	/*
    	if ($we == 6){$we = 1;}
    	elseif ($we == [7]){$we = 9;}
    	*/
     
    		echo '
    		<tr>
    			<td width="30" bgcolor = "'.$color[2].'">'.$i.'</td>
    			<td width="80" bgcolor = "'.$color[2].'">'. ucwords(strftime("%A", $stamp)). '</td>
    			<td width="1080" bgcolor = '.$color[$we].'> &nbsp; </td>
    		</tr>
    		
    		';
    	}
    	echo '</table>';
    Ce qui donne déjà :
    Nom : calessai1.gif
Affichages : 79
Taille : 16,8 Ko

    Je suis encore loin du résultat, mais au moins ça a de la gueule

    Petit à petit...

    DS7

  13. #33
    Membre du Club Avatar de RinaBK
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2021
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2021
    Messages : 92
    Points : 64
    Points
    64
    Par défaut
    J’ai bien vu que la discussion est résolue, mais je voulais quand même poster un petit message, car ce sujet m’a fait ressortir d’un de mes premiers codes en PHP qui doit avoir au moins 20 ans !

    Donc, si jamais ça peut aider ou encore donner quelques idées, voici la page que j’avais réalisé pour faire mon premier agenda.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    <?
    //		Jour d'affichage à partir de la date coutante
    $avant = 15;
    $apres = 15;
     
     
     
     
    //		Affiche le mois en lettre
    function moisTXT($moisNum) {
    	$lettre = array('Janvier','F&eacute;vrier','Mars','Avril','Mai','Juin','Juillet','Ao&ucirc;t','Septembre','Octobre','Novembre','D&eacute;cembre');
    	for ($i = 0; $i < count($lettre); $i++) { if ($moisNum == ($i + 1)) { return $lettre[$i]; } }
    }
     
     
    //		Affiche le jour en lettre
    function jourTXT($jourNum) {
    	$lettre = array('Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi');
    	for ($i = 0; $i < count($lettre); $i++) { if ($jourNum == $i) { return $lettre[$i]; } }
    }
     
     
     
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>Agenda [v1.3]</title>
    </head>
     
     
     
     
    <body style="padding: 5px 0px 0px 0px; margin: 0px 0px 0px 0px;">
     
    <?
    // Récupération de la date d'aujourd'hui
    $now = mktime('00','00','00',date('m'),date('d'),date('Y'));
     
     
    //	Calcule pour l'affichage des jours avant et après aujourd'hui
    for ($i = $avant; $i >= 2; $i--) { $agDate[] = bcsub($now,(86400*$i)); }
    $agDate[] = bcsub($now,86400);
    $agDate[] = $now;
    $agDate[] = bcadd($now,86400);
    for ($i = 2; $i <= $apres; $i++) { $agDate[] = bcadd($now,(86400*$i)); }
    ?>
     
     
    <table border="1" cellpadding="5" cellspacing="0">
    	<?
    	//	Affichage des jours du calendrier
    	for ($i = 0; $i < count($agDate); $i++) {
     
     
    		if ($agDate[$i] == $now) {
    			//	Style pour la date d'aujourd'hui
    			$sClass = 'background: #FAE7CB; font-size: 25px; text-decoration: underline; font-variant: small-caps;';
    		} else {
    			//	Style pour les jours classique
    			$sClass = 'background: #CCCCCC; font-size: 15px;';
    		}
     
     
     
    		// Style pour tous les 18 du mois
    		if (date('j',$agDate[$i]) == 20) { $sClass = 'background: #FFFFA8;'; }
     
    		// Style pour tous les lundi
    		if (date('w',$agDate[$i]) == 1) { $sClass = 'background: #B0B0FF;'; }
     
    		?>
    		<tr>
    			<td align="left" valign="top" style="<?=$sClass;?>">
    				<?=jourTXT(date('w',$agDate[$i])).' '.date('d',$agDate[$i]).' '.moisTXT(date('m',$agDate[$i])).' '.date('Y',$agDate[$i]);?>
    			</td>
    			<td align="left" valign="top" style="<?=$sClass;?>">
    				<?
     
     
    				// Exemple : Tous les dimanche...
    				if (date('w',$agDate[$i]) == 6) { echo '<div>[12:00-17:00] Test de RDV</div>'; }
     
    				// Exemple : Tous les mardi...
    				if (date('w',$agDate[$i]) == 2) { echo '<div>[12:00-17:00] Manger des spagetti</div>'; }
     
    				// Exemple : Tous les 20 du mois
    				if (date('j',$agDate[$i]) == 20) { echo '<div>[12:00-17:00] Picine</div>'; }
     
     
    				?>
    			</td>
    		</tr>
    		<?
    	}
    	?>
    </table>
     
    </body>
    </html>

    Par la suite, je l’avais complètement modifié pour inclure une partie administration qui enregistrait via la base de données les rendez-vous.

    Si mon message est hors sujet, veuillez m’en excuser. C’est le calendrier qui m’a fait rebondir
    • On dit que le ridicule ne tue pas; On dit aussi que ce qui nous tue pas, nous rends plus fort; Alors pourquoi ne pas dire : Le ridicule nous rends plus fort !
    • On reproche aux gens de parler d'eux-même; C'est pourtant le sujet qu'ils traitent le mieux !

  14. #34
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    RinaBK

    Oui ce thread est résolu, mais le mieux est l'ennemi du bien

    Si tu donnes une petit gâteau à un gamin et que juste ensuite tu lui montres un énorme...

    Merci pour ton code très intéressant, de quoi glaner/conserver et trouver des idées complémentaires.

    Là, je commence à avancer via comparaison entre les dates de fêtes et la date bouclée.

    Ce thread est ouvert à tout le monde et surtout aux femmes

    DS7

  15. #35
    Membre du Club Avatar de RinaBK
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2021
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2021
    Messages : 92
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par Droïde Système7 Voir le message
    RinaBK
    Si tu donnes une petit gâteau à un gamin et que juste ensuite tu lui montres un énorme...

    Merci pour ton code très intéressant, de quoi glaner/conserver et trouver des idées complémentaires.
    Je code depuis environs 25 ans, donc oui, j'ai pas mal de code que j'ai conservé. Ceci-dit, j'en ai aussi beaucoup perdu : les plus récents (les plus intéressants) malheureusement. J'ai mon HD qui a cramé donc j'ai perdu presque 10 ans de boulot, la galère (j'en avais les larmes aux yeux) Bref, vais pas polluer ton sujet avec de la tchatche et du blabla hors-sujet Mais clair que si mes vieux codes peuvent aider ou donner quelques idées, ça ne me coute rien de les ressortir !



    Citation Envoyé par Droïde Système7 Voir le message
    Là, je commence à avancer via comparaison entre les dates de fêtes et la date bouclée.
    DS7
    Pour revenir dans le sujet, j’ai peut-être quelques infos qui peuvent peut-être t’aider (ou pas )

    Test la validité d’une date
    Très utile surtout pour, par exemple, lorsque l’on a une boucle sur 31 jours. Grace a cette fonction, les mois à 30 jours ou pour le mois de février, cela empêche d’afficher des jours qui n’existe pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    checkDate($mois,$jour,$annee);
    Elle retourne TRUE si la date existe ou FALSE si elle n’existe pas.


    Aussi pour la fonction date(); un petit tableau utile :

    Jours
    l = Jour en toute lettre (anglais)
    D = 3 premières lettre du jour (anglais)
    w = Jour de la semaine (0 = Dimanche,..., 6 = Samedi)
    d = Jour du mois sur 2 chiffres
    j = Jour du mois sur 1 ou 2 chiffres
    S = Suffixe sur 2 lettres (en angais) du nombre indiquant le jour
    z = Numéro du jour dans l'année (0 = 1er janvier)

    Mois
    F = Mois en toutes lettres (anglais)
    M = Première lettres du mois (anglais)
    m = Mois sur 2 chiffres
    n = Mois sur 1 ou 2 chiffrs
    t = Nombre de jour dans le mois

    Année
    Y = Année sur 4 chiffres
    y = Année sur 2 chiffres
    L = Année bissextile renvois 1, sinon renvois 0

    Heures
    g = heure 12H, sur 1 ou 2 chiffres
    G = heure 24H, sur 1 ou 2 chiffres
    h = heure 12H, sur 2 chiffres
    H = heure 24H, sur 2 chiffres
    a = am/pm
    A = AM/PM
    I = Heure d'été retourne 1, Hivers retourne 0
    T = fuseau horaire
    Z = Décalage horaire GMT
    B = Heure Swatch

    Minutes
    i = Minutes sur 2 chiffres

    Secondes
    s = Secondes sur 2 chiffres

    Date dans son ensemble
    r = Date au format RFC 822
    U = Retourne le timestamp


    Donc, si je veux afficher la date AAAA-MM-JJ HH:MM:SS


    Citation Envoyé par Droïde Système7 Voir le message
    Ce thread est ouvert à tout le monde et surtout aux femmes
    DS7
    Merci c'est très gentil
    • On dit que le ridicule ne tue pas; On dit aussi que ce qui nous tue pas, nous rends plus fort; Alors pourquoi ne pas dire : Le ridicule nous rends plus fort !
    • On reproche aux gens de parler d'eux-même; C'est pourtant le sujet qu'ils traitent le mieux !

  16. #36
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut Pas taper ! ;-)
    Citation Envoyé par pas-douée Voir le message

    .../...

    J'attends de voir ton code ...
    Coucou,

    Voici : c'est un peu crade mais le principe est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    <?php
    	ini_set("display_errors", TRUE);
    	error_reporting(E_ALL);
     
    	$num_year = date('Y'); // N° année en cours = 2021
     
    	// Inspiré aussi de :
    	// https://www.php.net/manual/fr/function.easter-days.php
        $holidays = array(
            // Jour de l'an
            mktime(0, 0, 0, 01, 01, $num_year), 
            // 1er mai
            mktime(0, 0, 0, 05, 01, $num_year), 
     
    		//##################################
    		// pour TEST sur 3 mai
    		mktime(0, 0, 0, 05, 03, $num_year), 	
    		// pour TEST sur 4 mai
    		mktime(0, 0, 0, 05, 04, $num_year), 
    		//##################################
     
            // 14 juillet
            mktime(0, 0, 0, 07, 14, $num_year)
        );
     
    	/*
    	EXEMPLE RECHERCHE POUR DÉMO :
    	
    	01/01/2021
    	01/05/2021
    	03/05/2021
    	05/05/2021
    	14/07/2021   
    	
    
    	foreach ($holidays as $holiday) 
    	{
    		echo date("d/m/Y", $holiday) . '<br>';
    	}
    	*/
     
     
    	// https://www.developpez.net/forums/d2100110-nouveau/php/langage/modification-amelioration-boucles-for/
    	// Merci aussi à "Très-Douée" pour son idée ;-)
    	setlocale(LC_TIME, 'fr_FR.UTF-8', 'fr_FR', 'fr', 'fra_fra'); // pour avoir le nom des jours en français
     
    	$color = array('rgb(51, 102, 255)', 'Red', 'Lavender', 'yellow', 'green', 'black', 'purple', 'pink', 'navy');
     
    	$num_mois = 5 ; // numéro du mois à afficher
    	$nb_jour  = date('j',mktime(0,0,0,$num_mois +1,0,$num_year)); // nombre de jours du mois à afficher
     
    	echo '
    	<table border=1><caption><b>'.strtoupper (strftime("%B %Y", mktime(12,0,0,$num_mois,1,$num_year))).'</b></caption>';
     
    	for ($i = 1; $i <= $nb_jour; $i++) 
    	{
    		$stamp = mktime(12, 0, 0, $num_mois, $i, $num_year);
     
    		$we = date('N', $stamp); // 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 
     
    		//$jours_feries = '01/05/2021'; // en dur pour test
    		foreach ($holidays as $holiday) 
    		{
    			$jours_feries = date("d/m/Y", $holiday);
    			$date_boucle_mois = date("d/m/Y", $stamp);
    			if ($date_boucle_mois == $jours_feries)
    			{
    				$we = 8;
    			}	
    	}	
     
    		echo '
    		<tr>
    			<td width="30" bgcolor = "'.$color[2].'">'.$i.'</td>
    			<td width="80" bgcolor = "'.$color[2].'">'. ucwords(strftime("%A", $stamp)). '</td>
    			<td width="1080" bgcolor = '.$color[$we].'> &nbsp; '.date("d/m/Y", $stamp).' </td>
    		</tr>
    		
    		';
    	}
    	echo '
    	</table>';
     
    ?>
    Ceci dit, j'ai codé un peu n'importe quoi et à un certain moment au lancement ; le principe à mon avis était fort concluant

    Alors tu en dis quoi ?

    Nom : calessai2.gif
Affichages : 71
Taille : 30,9 Ko

  17. #37
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    RinaBK,

    Pas plus tard que ce matin, ma bécane a freezé et obligé de rebooter sans possibilité par exemple de valider telles ou telles tâches en cours.

    Résultat des courses en relançant mon Notepad++ = une page PHP (pourtant déjà enregistrée !) était devenue inutilisable
    Ceci dit : ce n'est pas la première fois que ce programme me fait le coup, depuis j'aime mieux te dire que la fonction "valider" est presque usée

    Mais ouffffffff (en pensant à toi...) j'ai uploadé cette page et re oufffffff.

    Bref, merci, je vais ajouter tes précisions à mon pense-bête pourtant largement obsolète (SoftNote2000), mais que j'utilise avec bonheur depuis des années et des années.

    Bienvenue sur DVP !



    DS7

  18. #38
    Membre du Club Avatar de RinaBK
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2021
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2021
    Messages : 92
    Points : 64
    Points
    64
    Par défaut
    Clair que quand on a des logiciels qu'on aime, rien à faire qu'ils soient obsolète! Moi c'est un vieux Ultra-Edit que j'utilise toujours pour coder, car pour moi, un bon traitement de texte spécialement pour programmeur, c'est la base pour coder à la main

    Et bien je te remercie, c'est vrai que je suis nouvelle ici
    • On dit que le ridicule ne tue pas; On dit aussi que ce qui nous tue pas, nous rends plus fort; Alors pourquoi ne pas dire : Le ridicule nous rends plus fort !
    • On reproche aux gens de parler d'eux-même; C'est pourtant le sujet qu'ils traitent le mieux !

  19. #39
    Membre du Club
    Femme Profil pro
    particulier
    Inscrit en
    Juillet 2020
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : particulier

    Informations forums :
    Inscription : Juillet 2020
    Messages : 51
    Points : 59
    Points
    59
    Par défaut
    Personne ne vous jamais parler de l'utilité de faire régulièrement des sauvegardes sur deux disques durs externes ? Par exemple : https://oz.fr/gestion-des-donnees-et...de-sauvegarde/
    @ RinaBK.

    En lisant les posts précédant et les bouts de code, il n'est plus nécessaire de :
    - franciser la date
    - contrôler du nombre de jours dans le mois

    @ Droïde Système7

    En postant du code, merci d'en ôter le code en commentaire.
    Je ne saisis pas bien la finalité de toutes ces couleurs car tu voulais juste mettre en évidence les WE.

    Le but d'un programme c'est de ne pas avoir à y revenir, aussi je ne comprends pas toujours ton raisonnement de ne faire qu'un mois.

    A la place de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    foreach ($holidays as $holiday) 
    {
       $jours_feries = date("d/m/Y", $holiday);
        $date_boucle_mois = date("d/m/Y", $stamp);
        if ($date_boucle_mois == $jours_feries)
        {
            $we = 8;
        }   
    }

    pourquoi pas ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $jours_feries = array('101','501','714','815','1101','1111','1225'); // il faudra ajouter les 3 jours fériés mobiles voir le lien précédent pour Pâques et avec les fonctions https://www.php.net/manual/fr/book.array.php
    if(in_array(date('nd',time()),$jours_feries) {$we = 8;}


    Je ne donne jamais de gâteau, j'essaye d'expliquer comment le faire avec quels ingrédients.

    Pomper par-ci par-là des bouts de code, sans trop les comprendre, ça ne sert pas à grand chose. Il vaut mieux prendre du temps à lire des tutos initiation au PHP ou PHP pour bien débuter (il y en a en français) ou parcourir les sites références comme https://www.php.net/manual/fr/

    Pourquoi une variable $hollidays (vacances) pour des jours fériés ?
    J'ai utilisé la variable $we pour mettre en évidence les samedi et dimanche. En y ajoutant les jours fériés j'aurai dû la remplacer par $jour_chome (chomé).
    Utilises des noms de variables explicitent pour toi maintenant, c'est plus facile à comprendre pour les autres et pour toi dans quelques temps.


  20. #40
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut


    J'avais dit : pas taper !

    J'avais également dit que ce n'était que le principe et non que c'était bon pour la prod, nuance

    Bien entendu qu'ensuite tout sera "lissé" renommé itout comme il se doit.

    Pourquoi toutes ces couleurs ?

    Hé bien là aussi : le principe et grâce à lui j'ai trouvé une méthode qui fonctionne

    Si seulement je n'avais à me concentrer que sur un seul langage, je patinerais moins et surtout aurais plus de temps.

    Ceci dit tu serais une bonne prof, mais oublie ta matraque

    Pas de jalouses

    En attendant, tu ne m'as pas apporté le bon gâteau, mais sa cerise le surmontant, merci miammmmm, miammmmm !

    DS7

    PS : Je disais précédemment ceci :
    Ceci dit, j'ai codé un peu n'importe quoi et à un certain moment au lancement ; le principe à mon avis était fort concluant
    C'était sous forme d'hyperbole.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2016] amélioration boucle for trop longue
    Par Phenicia77 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 15/09/2020, 18h50
  2. Modification condition dans une boucle for
    Par fred61 dans le forum Débuter
    Réponses: 14
    Dernier message: 06/08/2013, 16h39
  3. [Batch] Modification des paramètres d'entrée dans une boucle FOR
    Par reppier dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 15/06/2009, 16h23
  4. Pb de modification de liste dans une boucle for
    Par schnito dans le forum Général Python
    Réponses: 5
    Dernier message: 20/04/2007, 11h27
  5. [langage] boucle "for" modification du pas
    Par K-ZimiR dans le forum Langage
    Réponses: 4
    Dernier message: 29/04/2004, 12h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo