J'ai besoin d'une méthode pour ajouter des "jours ouvrables" en PHP. Par exemple, vendredi 12/5 + 3 jours ouvrables = mercredi 12/10.
Au minimum, j'ai besoin du code pour comprendre les week-ends, mais idéalement, il devrait également tenir compte des jours fériés fédéraux américains. Je suis sûr que je pourrais trouver une solution par la force brute si nécessaire, mais j'espère qu'il existe une approche plus élégante. N'importe qui?
Merci.
Réponses:
Voici une fonction des commentaires des utilisateurs sur la page de fonction date () dans le manuel PHP. C'est une amélioration d'une fonction antérieure dans les commentaires qui ajoute un support pour les années bissextiles.
Entrez les dates de début et de fin, ainsi qu'un tableau de tous les jours fériés qui pourraient être entre les deux, et il renvoie les jours ouvrables sous forme d'entier:
la source
Obtenez le nombre de jours ouvrables sans jours fériés entre deux dates:
Utilisez l'exemple:
Production:
Fonction:
la source
$interval = DateInterval::createFromFormat('1 weekday');
Je recommande également d'utiliser$holidays = array_flip($holidays);
avant le foreach etif isset($holidays[$period->format('Y-m-d')]);
de réduire le temps de traitement nécessaire par itération. Mais recommandez de créer une fonction personnalisée pour les vacances afin de pouvoir traiter des vacances relatives comme Thanksgivinglast thursday of november
ou la fête du travailfirst monday of september
Il y a quelques arguments pour la fonction date () qui devraient aider. Si vous cochez la date ("w"), il vous donnera un numéro pour le jour de la semaine, de 0 pour dimanche à 6 pour samedi. Alors ... peut-être quelque chose comme ...
Ceci n'est qu'un exemple approximatif d'une possibilité.
la source
Le calcul des vacances n'est pas standard dans chaque État. J'écris une application bancaire pour laquelle j'ai besoin de règles commerciales strictes, mais je ne peux toujours obtenir qu'une norme approximative.
la source
la source
Voici une fonction pour ajouter des jours d'affaires à une date
Un autre article mentionne getWorkingDays (à partir des commentaires de php.net et inclus ici) mais je pense que cela se brise si vous commencez un dimanche et que vous finissez un jour de travail.
En utilisant ce qui suit (vous devrez inclure la fonction getWorkingDays du post précédent)
Donne le résultat comme 5 pas 4
La fonction suivante a été utilisée pour générer ce qui précède.
Apportez les vacances ...
la source
Vous pouvez essayer cette fonction qui est plus simple.
la source
Une fonction pour ajouter ou soustraire des jours ouvrés à une date donnée, cela ne tient pas compte des jours fériés.
utiliser comme ça ...
la source
Ma version basée sur le travail de @mcgrailm ... a été modifiée car le rapport devait être révisé dans les 3 jours ouvrables, et s'il était soumis un week-end, le comptage commencerait le lundi suivant:
Et calculer la différence de deux dates en termes de jours ouvrables:
En guise de note, tous ceux qui utilisent 86400 ou 24 * 60 * 60, s'il vous plaît ne le faites pas ... votre heure d'oubli change de l'heure d'hiver / d'été, où un jour n'est pas exactement 24 heures. Bien que le strtotime soit un peu plus lent ('+ 1 day', $ timestamp), il est beaucoup plus fiable.
la source
Tentative brutale de détection du temps de travail - du lundi au vendredi de 8h à 16h:
la source
Vous trouverez ci-dessous le code de travail pour calculer les jours ouvrables à partir d'une date donnée.
la source
Voici une autre solution sans boucle for pour chaque jour.
la source
Pour les vacances, créez un tableau de jours dans un format que date () peut produire. Exemple:
Utilisez ensuite les fonctions in_array () et date () pour vérifier si l'horodatage représente un jour férié:
la source
J'ai eu ce même besoin, j'ai commencé avec le premier exemple de Bobbin et j'ai fini avec ça
hth quelqu'un
la source
!in_array($enddate,$holidays)
pour!in_array(date('Y-m-d',$enddate),$holidays)
utiliser un tableau de vacances passé comme Bobbins '-$holidays=array('2013-06-16','2013-07-12','2013-08-05');
Sinon, vous vérifiez un tableau plein de dates pour un horodatage, qui retourne toujours false.Variante 1:
Variante 2:
Variante 3:
Les considérations supplémentaires relatives aux vacances peuvent être prises en compte en utilisant des variantes de ce qui précède en procédant comme suit. Remarque! assurez-vous que tous les horodatages sont à la même heure de la journée (c'est-à-dire minuit).
Faites un tableau de dates de vacances (sous forme d'horodatage unixtimestamp), c'est-à-dire:
Modifier la ligne:
être :
Terminé!
la source
la source
Voici une solution récursive. Il peut facilement être modifié pour ne conserver et renvoyer que la dernière date.
la source
la source
la source
calculer les jours ouvrables entre deux dates, y compris les jours fériés et la semaine de travail personnalisée
La réponse n'est pas si triviale - donc ma suggestion serait d'utiliser une classe où vous pouvez configurer plus que de compter sur une fonction simpliste (ou en supposant une locale et une culture fixes). Pour obtenir la date après un certain nombre de jours ouvrables, vous:
Approche fonctionnelle
la source
C'est une autre solution, c'est près de 25% plus rapide que de vérifier les vacances avec in_array:
la source
Cet extrait de code est très facile à calculer le jour ouvrable sans week-end ni jours fériés:
la source
Je sais que je suis en retard à la fête, mais j'utilise cet ancien ensemble de fonctions de Marcos J. Montes pour déterminer les jours fériés et les jours ouvrables. Il a pris le temps d'ajouter un algorithme de 1876 pour Pâques et il a ajouté toutes les grandes vacances américaines. Cela peut facilement être mis à jour pour d'autres pays.
la source
function get_business_days_forward_from_date ($ num_days, $ start_date = '', $ rtn_fmt = 'Ym-d') {
}
la source
Le add_business_days a un petit bogue. Essayez ce qui suit avec la fonction existante et la sortie sera un samedi.
Date de début = vendredi Jours ouvrables à ajouter = 1 Tableau des jours fériés = Ajouter la date du lundi suivant.
J'ai corrigé cela dans ma fonction ci-dessous.
la source
Je fais juste fonctionner ma fonction sur la base du code Bobbin et mcgrailm, en ajoutant des choses qui ont fonctionné parfaitement pour moi.
la source
Une amélioration de la fonction offerte par James Pasta ci-dessus, pour inclure tous les jours fériés fédéraux, et pour corriger le 4 juillet (a été calculé comme 4 juin ci-dessus!), Et pour inclure également le nom du jour férié comme clé du tableau ...
/ **
* National American Holidays
* @param string $ year
* @return array
* /
public static function getNationalAmericanHolidays ($ year) {
}
la source
Je viens de terminer d'écrire une API qui peut être utilisée pour manipuler les jours ouvrables (aucune de ces solutions n'a vraiment fonctionné pour ma situation :-); lien vers lui ici au cas où quelqu'un d'autre le trouverait utile
~ Nate
Classe PHP pour calculer les jours ouvrables
la source
Merci à Bobbin, mcgrailm, Tony, James Pasta et quelques autres qui ont posté ici. J'avais écrit ma propre fonction pour ajouter des jours ouvrables à une date, mais je l'ai modifiée avec du code que j'ai trouvé ici. Cela gérera la date de début étant un week-end / jour férié. Cela gérera également les heures d'ouverture. J'ai ajouté quelques commentaires et décomposé le code pour le rendre plus facile à lire.
la source
Personnellement, je pense que c'est une solution plus propre et plus concise:
Envoyez simplement la
new
date proposée à cette fonction.la source