计算营业时间持续时间,不包括公共假期

问题描述 投票:0回答:1

我正在尝试确定 PHP 中的时间间隔的持续时间,考虑到周一至周五的工作时间(上午 9 点到下午 5 点),不包括特定的公共假期。让我们考虑公共假期为2023年8月15日、2023年11月1日、2023年11月11日和2023年12月25日。

例如,假设我有一个从 10 月 28 日 07:00:00 到 11 月 3 日 10:00:00 的间隔。如何计算仅在工作时间内(不包括周末和上述假期)的持续时间(以秒为单位)?

我正在寻找有关实现此持续时间计算的有效方法的指导。

php datetime intervals
1个回答
0
投票
  • Y-m-d
    格式或类似格式将假期列表保存在数组中。
  • 每天都重复一遍。
  • 检查是否是周末或是否属于这些假期之一。如果是,请跳过它们。
  • 对于当前有效日期,只需添加 9 小时。如果日期是开始日期或结束日期,则获取最长开始时间和最短结束时间,并将有效时间添加到您的答案中。

伪代码:

holidays = ['2023-08-15', '2023-11-01', '2023-11-11', '2023-12-25']
startDay = '2023-10-28 07:00:00'
endDay = '2023-11-03 10:00:00'

ans = 0

for day in range(start, end):
   if day in holidays OR date->weekDay() in [6, 0]:
       continue
   startTime = '09:00:00 AM'
   endTime = '17:00:00 PM' 
   if day == startDay:
      startTime = max('09:00:00 AM', day->startTime)
   if day == endDay:
      endTime = min('17:00:00 PM', day->endTime)
   if endTime > startTime and startTime >= '09:00 AM' and endTime <= '17:00:00 PM': 
      ans += endTime - startTime

print ans + ' working hours'
© www.soinside.com 2019 - 2024. All rights reserved.