Existe-t-il un moyen d'utiliser strtotime
pour ajouter des jours ouvrables (du lundi au vendredi) à une date? Ou une autre méthode? Qu'est-ce que je veux faire est:Jours ouvrables (lun-ven) en PHP
date ('Y-m-j' , strtotime ('+3 working days'))
Existe-t-il un moyen d'utiliser strtotime
pour ajouter des jours ouvrables (du lundi au vendredi) à une date? Ou une autre méthode? Qu'est-ce que je veux faire est:Jours ouvrables (lun-ven) en PHP
date ('Y-m-j' , strtotime ('+3 working days'))
Si vous êtes limité à la semaine, utilisez la chaîne jours de la semaine.
echo date ('Y-m-j' , strtotime ('3 weekdays'));
Cela devrait vous faire bondir de 3 jours de la semaine, donc si c'est jeudi, il va ajouter l'heure de fin de semaine supplémentaire.
Source: http://www.php.net/manual/en/datetime.formats.relative.php
No * way. * Cela fonctionne? Y at-il quelque chose que strtotime() ne peut pas faire? –
@Pekka J'ai parfois été foutu par son incapacité à des choses comme "le premier jour du mois il y a 10 mois" et "le premier jour de ce mois". – Yahel
Cela fonctionne buggé cependant: 'écho date ('Y-m-d', strtotime ('2011-03-27 + 5 jours de la semaine'));' Prévu le 1er avril, obtenu le 3 avril. – zerkms
J'ai trouvé ce buggy quand besoin d'un plus grande quantité de semaine. Je cherchais X nombre de jours ouvrables après le 1er du mois en cours.
Apparemment bien d'abord après avoir ajouté> 5 jours ouvrables (similaire à ce que @zerkms trouvé).
Cela s'est avéré plus précis pour moi.
function _getBusinessDayOfMonth($days) {
$time = strtotime(date("m/1/Y 00:00")); //finding # of business days after 1st of the month
$i = 0; //start with zero
while ($i < $days) { //loop through until reached the amount of weekdays
$time = strtotime("+1 day", $time); //Increase day by 1
if (date("N", $time) < 6) { //test if M-F
$i++; //Increase by 1
}
}
echo date("m/d/Y", $time);
}
Je pense que la fonction peut être facilement développé que vous pouvez simplement exporter jour actuel pas de la semaine et vous pouvez ajouter deux et mod 5 vous donnera facilement en semaine.
function increaseWorkDay($workDayToProcess, $dayToAdd){
if($workDayToProcess >= 4 && $workDayToProcess <= 6){
$workDayToProcess= 4;
}
$workDayToProcess+= $dayToAdd;
return $workDayToProcess % 5;
}
Et vous pouvez exporter le nom du jour de la semaine en utilisant un tableau, cette méthode peut également être utilisée.
je le fais récursive, a travaillé pour moi
function add_work_days($date, $day){
if($day == 0)
return $date;
$date->add(new DateInterval('P1D'));
if(!in_array($date->format('N'), array('6', '7')))
$day--;
return add_work_days($date, $day);
}
$date = add_work_days(new DateTime(), 3);
echo $date->format('d/m/Y');
Pour les anciennes versions de PHP 5.3 <
function AddWorkingDays($startDate, $adddays)
{
$retdate = $startDate;
$sign = "+";
if($adddays < 0){
$adddays = $adddays*-1;
$sign = "-";
}
while ($adddays > 0) {
$retdate = date ('Y-m-d' , strtotime ("$retdate {$sign}1 day"));
$what_day = date("N", strtotime($retdate));
if ($what_day != 6 && $what_day != 7) // 6 and 7 are weekend
$adddays--;
};
return $retdate;
}
Dans certains pays du Moyen Orient un week-end une semaine de travail du dimanche au jeudi. Avez-vous pensé à eux: O –
C'est pour savoir combien de jours dans le futur la date limite de paiement est pour un événement local, donc non :-) – fredley
Vous devez aussi penser aux vacances. – yvoyer