Comment puis-je calculer le nombre de jours ouvrés entre deux dates

Nous avons un PHP système de feuille de temps qui a été développé en interne, et a évolué au fil des ans, mais un morceau de l'information présentée à l'utilisateur le nombre de jours restant sur chaque projet.

Actuellement, je prends simplement la différence entre la date courante et la date de fin du projet, et de le diviser par 7 et multiplier par 5. Cela a suffi pour une longue période et est la plupart du temps assez précis pour les employés qui travaillent à temps plein du lundi au vendredi. Cependant, nous avons maintenant un certain nombre d'employés qui travaillent uniquement le jour impair une semaine.

Le système de feuille de temps est conscient de ce que les jours de travail du personnel, cette information est stockée dans une chaîne de caractères dans la classe utilisateur, pour un travailleur, la valeur serait NNYYYYY (sens ssMTWTF).

Je pourrais très facilement rendre le résultat plus précis, en divisant la différence entre les deux dates par sept, puis en multipliant le résultat par le nombre de jours de travail, mais tout en faisant ce changement, je suis envisagent de produire un beaucoup plus précis des moyens de calcul de la valeur réelle.

La manière la plus simple qui vient à l'esprit serait d'utiliser une boucle entre les deux dates, en comparant le jour de la semaine de travail de l'utilisateur modèle, ajouter un à un compteur sur les jours où l'utilisateur travaille ce jour-là.

Étant donné que ce calcul doit être effectué sur une moyenne d'environ 30 fois par page afficher en raison du nombre de projets sur la feuille de temps et de projets peuvent s'étendre sur 12 ou 18 mois, et de temps (que beaucoup de boucle pour chaque chargement de la page), je me demande si il y a une méthode plus efficace de le faire en PHP?

La tâche peut être divisée en trois parties: l'partielle de la première semaine, un certain nombre de semaines complètes, partielles, la semaine dernière. Le calcul que vous êtes déjà en train de le fonctionne pour les semaines complètes dans le milieu, donc vous avez seulement besoin d'une boucle pour traiter les semaines partielles.
Bonne idée @user3386109, je n'avais pas envisagé cette approche à tous. Peut-être la peine de poster une réponse?
Je ne sais pas si je dirais que la réponse à une question, juste quelque chose à penser. Vous avez encore beaucoup de détails à travailler 🙂
Un détail blog: goo.gl/YOsfPX

OriginalL'auteur Bryan | 2014-05-03