LeGastronome Posted January 8, 2015 Share Posted January 8, 2015 Bonjour, J'ai fais ce script mais il ne me renvoi pas ce que j'ai besoin... une idée ? Il ne saute pas les week end .. //Ajoute 3 working days $wd=1; $i=1; while ($wd != 3) { $date_mk= mktime(0, 0, 0, date("m") , date("d")+$i, date("y")); if( (date("N",$date_mk)!=6) OR (date("N",$date_mk)!=7) ) $wd++; $i++; } $date_mk= mktime(0, 0, 0, date("m") , date("d")+$i, date("y")); //Ajoute 5 working days $wd=1; $i=1; while ($wd != 5) { $date_mk2= mktime(0, 0, 0, date("m") , date("d")+$i, date("y")); if( (date("N",$date_mk)!=6) OR (date("N",$date_mk)!=7) ) $wd++; $i++; } $date_mk2= mktime(0, 0, 0, date("m") , date("d")+$i, date("y")); $date_exp = utf8_encode(strftime("%A %d %B",$date_mk)); $date_exp2 = utf8_encode(strftime("%A %d %B",$date_mk2)); $this->context->smarty->assign('expedition_date1',$date_exp); $this->context->smarty->assign('expedition_date2',$date_exp2); Link to comment Share on other sites More sharing options...
dschoorens Posted January 9, 2015 Share Posted January 9, 2015 (edited) Bonjour, remplacez les OR par des AND dans if( (date("N",$date_mk)!=6) OR (date("N",$date_mk)!=7) ) if( (date("N",$date_mk)!=6) AND (date("N",$date_mk)!=7) ) j'ai testé avec le code ci-dessous qui affiche le résultat pour les 7 prochains jours : <?php function add_working_days($nb_days, $date_start) { $wd=1; $i=1; while ($wd != $nb_days) { $date_mk= $date_start +(86400 * $i); if( (date("N",$date_mk)!=6) and (date("N",$date_mk)!=7) ) {$wd++;} $i++; } return $date_start +(86400 * $i); } for ($d=0; $d<8; $d++) { $date_cmd = mktime(0, 0, 0, date("m") , date("d")+$d, date("y")); $date_mk=add_working_days(3,$date_cmd); echo date('c', $date_cmd).' '.date('c', $date_mk)."<br>"; }?> Cordialement. Daniel Schoorens Edited January 9, 2015 by dschoorens (see edit history) Link to comment Share on other sites More sharing options...
LeGastronome Posted January 9, 2015 Author Share Posted January 9, 2015 Byzarre pourquoi des AND c'est bien ca ou ca ? Link to comment Share on other sites More sharing options...
J. Danse Posted January 9, 2015 Share Posted January 9, 2015 Non. Si vous mettez un OR, vous aurez ceci, transposé en français: - Si le jour est différent de 6 ou différent de 7. Or, 6 étant différent de 7, vous tomberez toujours dans votre si. Vous devez donc mettre un AND, car vous voulez savoir si le jour n'est ni un samedi ni un dimanche. Ceci dit, je partirais sur ceci, personnellement: http://codes-sources.commentcamarche.net/source/47518-calcul-simple-du-nombre-de-jours-ouvres-entre-deux-dates-jours-feries-integres Ainsi, vous prenez également en compte les jours fériés. Link to comment Share on other sites More sharing options...
seb776 Posted January 9, 2015 Share Posted January 9, 2015 Bonjour, Que cherchez vous à faire ? (les noms de vos variables sont horribles) Link to comment Share on other sites More sharing options...
J. Danse Posted January 9, 2015 Share Posted January 9, 2015 Assez simplement, il tente d'ajouter x jours ouvrés en partant d'une date. Seulement en se basant sur l'exclusion du week-end. Et je peux donner ceci, par rapport aux noms de variables pour ce que j'en comprends: - $wd = $week_day = jour de la semaine - $i = iteration - $nb_days = Nombre de jours à rajouter - $date_start = Date de démarrage - $date_mk = Date via mk_time() - $date_exp1 = Date d'expedition (minimum) - $date_exp2 = Date d'expedition (maximum). Et donc, on démarre d'une date donnée, on souhaite afficher une première date à 3jours ouvrés et une seconde date à 5jours ouvrés correspondant à la date prévue d'expédition. Voilà, complément d'informations sur ce que j'en comprends, donc. 1 Link to comment Share on other sites More sharing options...
seb776 Posted January 9, 2015 Share Posted January 9, 2015 $wd est incrémenté puis jamais utilisé. Link to comment Share on other sites More sharing options...
J. Danse Posted January 9, 2015 Share Posted January 9, 2015 Normal. Il sert de limite à une boucle. Il est incrémenté pour déterminer le point de sortie. Link to comment Share on other sites More sharing options...
seb776 Posted January 9, 2015 Share Posted January 9, 2015 Ah oui d'accord, pardon. Ce petit problème m’intéresse bien, je vais m'en occuper ce soir si j'ai rien de plus intéressant a faire ... (histoire de s'amuser a faire du code propre) 1 Link to comment Share on other sites More sharing options...
LeGastronome Posted January 9, 2015 Author Share Posted January 9, 2015 (edited) Merci oui je sais le code n'est pas bon mais il m'a pris quelques minutes à faire.. et effectivement $wd = working days on s'en fout un peu des nom de variable le script fait 10 lignes :-) Au passage en remplacant les OR en AND cela ne fonctionne pas mieux ? Edited January 9, 2015 by LeGastronome (see edit history) Link to comment Share on other sites More sharing options...
dschoorens Posted January 10, 2015 Share Posted January 10, 2015 Bonjour, Il faut appliquer une des règles de Morgan (logique de Boole) qui dit que ni (samedi ou dimahche) = ni samedi et ni dimanche vous aviez écrit (ni samedi) ou (ni dimanche) Votre résultat est toujours vrai car si on est samedi, la condition ni dimanche est remplie et inversement. Avez vous testé le bout de code que j'avais posté en premier et testé ? Cordialement. Daniel. Link to comment Share on other sites More sharing options...
LeGastronome Posted January 10, 2015 Author Share Posted January 10, 2015 C'était mon OPCache PHP qui était trop efficace... Ca marche merci... mais j'ai ajouté pas mal de fonction au code.. le code n'est pas très beau, mais je l'ai codé rapidement hier soir avec les pieds : Si cela peut aider les dev ! Share if((int)self::$cookie->id_lang==2){ setlocale(LC_TIME, "fr_FR"); } elseif((int)self::$cookie->id_lang==1){ setlocale(LC_TIME, "en_EN"); } elseif((int)self::$cookie->id_lang==4){ setlocale(LC_TIME, "de_DE"); } elseif((int)self::$cookie->id_lang==5){ setlocale(LC_TIME, "es_ES"); } // Ajoute 3 working day $i=1; if(date("G")>16 and date("N")==5) $wd=-1; elseif(date("G")>16) $wd=0; elseif( date("N")==6) $wd=0; else $wd=1; while ($wd != 3) { $date_mk= mktime(0, 0, 0, date("m") , date("d")+$i, date("y")); if( (date("N",$date_mk)!=6) AND (date("N",$date_mk)!=7) ){ $wd++; } $i++; } $date_mk= mktime(0, 0, 0, date("m") , date("d")+$i, date("y")); if(date("N",$date_mk)==6){ $i=$i+2; $date_mk= mktime(0, 0, 0, date("m") , date("d")+$i, date("y")); } elseif(date("N",$date_mk)==7){ $i=$i+1; $date_mk= mktime(0, 0, 0, date("m") , date("d")+$i, date("y")); } //Ajoute 5 working days $i=1; if(date("G")>16 and date("N")==5) $wd=-1; elseif(date("G")>16) $wd=0; elseif( date("N")==6) $wd=0; else $wd=1; while ($wd != 5) { $date_mk2= mktime(0, 0, 0, date("m") , date("d")+$i, date("y")); if( (date("N",$date_mk2)!=6) AND (date("N",$date_mk2)!=7) ){ $wd++; } $i++; } $date_mk2= mktime(0, 0, 0, date("m") , date("d")+$i, date("y")); if(date("N",$date_mk2)==6){ $i=$i+2; $date_mk2= mktime(0, 0, 0, date("m") , date("d")+$i, date("y")); } elseif(date("N",$date_mk2)==7){ $i=$i+1; $date_mk2= mktime(0, 0, 0, date("m") , date("d")+$i, date("y")); } //Ajoute 2 working days $i=1; if(date("G")>16 and date("N")==5) $wd=-1; elseif(date("G")>16) $wd=0; elseif( date("N")==6) $wd=0; else $wd=1; while ($wd != 2) { $date_mk_48= mktime(0, 0, 0, date("m") , date("d")+$i, date("y")); if( (date("N",$date_mk_48)!=6) AND (date("N",$date_mk_48)!=7) ){ $wd++; } $i++; } $date_mk_48= mktime(0, 0, 0, date("m") , date("d")+$i, date("y")); if(date("N",$date_mk_48)==6){ $i=$i+2; $date_mk_48= mktime(0, 0, 0, date("m") , date("d")+$i, date("y")); } elseif(date("N",$date_mk_48)==7){ $i=$i+1; $date_mk_48= mktime(0, 0, 0, date("m") , date("d")+$i, date("y")); } //Sending day if( (date("N")==6) ) $date_mk_send= mktime(0, 0, 0, date("m") , date("d")+2, date("y")); elseif( (date("N")==7) ) $date_mk_send= mktime(0, 0, 0, date("m") , date("d")+1, date("y")); elseif((date(G)>16)) $date_mk_send= mktime(0, 0, 0, date("m") , date("d")+1, date("y")); else $date_mk_send= mktime(0, 0, 0, date("m") , date("d"), date("y")); $date_exp = utf8_encode(strftime("%A %d %B",$date_mk)); $date_exp2 = utf8_encode(strftime("%A %d %B",$date_mk2)); $date_exp_48 = utf8_encode(strftime("%A %d %B",$date_mk_48)); $date_mk_send = utf8_encode(strftime("%A %d %B",$date_mk_send)); $this->context->smarty->assign('expedition_date1',$date_exp); $this->context->smarty->assign('expedition_date2',$date_exp2); $this->context->smarty->assign('expedition_date_48',$date_exp_48); $this->context->smarty->assign('expedition_delivery',$date_mk_send); Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now