Calculer le nombre de jours ouvrables entre deux jours
J'ai besoin de calculer le nombre de jours ouvrables entre deux dates. Comment puis-je l'enlever à l'aide de Ruby (Rails ou...si il y a des Rails spécifiques aides).
De même, j'aimerais être en mesure d'ajouter des jours à une date donnée.
Si une date tombe un jeudi et j'ai ajouté les 3 jours ouvrables, il serait de retour le mardi suivant.
- Je pense que de certaines façons de le faire, mais vous devez dire ce que le comportement que vous souhaitez lors de la "journée de référence" est un jour non ouvrable (samedi->lundi 0 jour ou 1 jour? Est jeudi->le samedi de 1 ou 2 jours?)
Vous devez vous connecter pour publier un commentaire.
Prendre un coup d'oeil à business_time. Il peut être utilisé pour les deux choses que vous demandez.
Calcul de jours ouvrables entre deux dates:
L'ajout d'affaires de jours à une date donnée:
Historique réponse
Lorsque cette question a été initialement demandé,
business_time
ne pas fournir lesbusiness_days_until
méthode la méthode ci-dessous a été fourni pour répondre à la première partie de la question.Cela pourrait encore être utile à quelqu'un qui n'a pas besoin de toutes les autres fonctionnalités de
business_time
et voulait éviter l'ajout d'une dépendance.Cela peut aussi être réglé pour gérer les cas qui Tipx mentionne dans la façon dont vous le souhaitez.
Nous utilisons l'algorithme proposé dans la mikej réponse et a découvert que le calcul de 25 000 gammes de plusieurs années, chacun prend 340 secondes.
Voici un autre algorithme à complexité asymptotique O(1). Il effectue les mêmes calculs dans 0.41 secondes.
business_time a toutes les fonctionnalités que vous souhaitez.
Du readme:
L'ajout d'affaires de jours à une date donnée:
Prendre un coup d'oeil à Workpattern. Il s'installe en vous permettant de spécifier de travail et les périodes de repos et peut ajouter/soustraire des durées vers/à partir d'une date ainsi que de calculer les minutes entre deux dates.
Vous pouvez configurer workpatterns pour les différents scénarios tels que lun-ven de travail ou dim.-jeu. et vous pouvez avoir des vacances et tout ou partie des jours.
J'ai écrit ce que l'écart d'apprendre Ruby. Encore besoin d'en faire plus Ruby-ish.
Voici ma (non gem et non de vacances) jour de la semaine comte exemple:
Basé sur @mikej de réponse. Mais cela prend aussi en compte les jours fériés, et renvoie une fraction de journée (jusqu'à l'heure de précision):
Il utilise le vacances et business_time gemmes.
Script Simple pour calculer le nombre total de jours de travail
Il y a deux problèmes avec les solutions les plus populaires répertoriées ci-dessus:
Après cuisson à l'étouffée sur elle, je propose cette solution qui résout ces deux problèmes. Ci-dessous prend une date de référence et à une autre date et calcule le nombre de jours ouvrables entre eux (retourne un nombre négatif si l'autre est avant la date de référence). L'argument eod_base contrôle si le comptage est fait à partir de la fin de la journée (nem) ou en début de journée. Il pourrait être écrite de manière plus compacte, mais j'espère que c'est relativement facile à comprendre et il ne nécessite pas des gemmes ou des rails.