Python Django:计算工作日
Python Django: Count business days
我需要计算两个日期之间的工作日。此外,我还必须删除单独 table(假期)中列出的日期。
到目前为止我有这段代码。它计算天数,但不会从单独的 table(假期)中删除天数。
class Holidays(models.Model):
class Meta:
ordering = ['date']
date = models.DateField(null=True, verbose_name='Date')
class Situation(models.Model):
class Meta:
ordering = ['date_time_start']
date_time_start = models.DateTimeField(null=True, blank=False, verbose_name='Date/Time Start')
date_time_end = models.DateTimeField(null=True, blank=False, verbose_name='Date/Time End')
@property
def business_days(self):
holidays = Holidays.objects.values_list('date', flat=True)
oneday = datetime.timedelta(days=1)
dt = self.date_time_start.date()
total_days = 0
while (dt <= self.date_time_end.date()):
if not dt.isoweekday() in (6, 7) and dt not in holidays.values():
total_days += 1
dt += oneday
return total_days
给你一个非常快速的提示,使用 numpy,更准确地说:
https://docs.scipy.org/doc/numpy/reference/generated/numpy.busday_count.html
它拥有您需要的一切:
它计算两个日期之间的工作日,您可以创建自己的假期列表,如下所示:
bd_holidays = ['2019-12-25', '2019-12-26']
bd_cal = np.busdaycalendar(holidays=bd_holidays)
之后你可以这样:
count = np.busday_count(begindate, enddate, weekmask='1111100', busdaycal=bd_cal)
我需要计算两个日期之间的工作日。此外,我还必须删除单独 table(假期)中列出的日期。
到目前为止我有这段代码。它计算天数,但不会从单独的 table(假期)中删除天数。
class Holidays(models.Model):
class Meta:
ordering = ['date']
date = models.DateField(null=True, verbose_name='Date')
class Situation(models.Model):
class Meta:
ordering = ['date_time_start']
date_time_start = models.DateTimeField(null=True, blank=False, verbose_name='Date/Time Start')
date_time_end = models.DateTimeField(null=True, blank=False, verbose_name='Date/Time End')
@property
def business_days(self):
holidays = Holidays.objects.values_list('date', flat=True)
oneday = datetime.timedelta(days=1)
dt = self.date_time_start.date()
total_days = 0
while (dt <= self.date_time_end.date()):
if not dt.isoweekday() in (6, 7) and dt not in holidays.values():
total_days += 1
dt += oneday
return total_days
给你一个非常快速的提示,使用 numpy,更准确地说:
https://docs.scipy.org/doc/numpy/reference/generated/numpy.busday_count.html
它拥有您需要的一切: 它计算两个日期之间的工作日,您可以创建自己的假期列表,如下所示:
bd_holidays = ['2019-12-25', '2019-12-26']
bd_cal = np.busdaycalendar(holidays=bd_holidays)
之后你可以这样:
count = np.busday_count(begindate, enddate, weekmask='1111100', busdaycal=bd_cal)