返回

如何计算请假时长、天数?一个简单且实用的方法!

前端

1. 引言

在现代企业管理中,员工请假是不可避免的事情,为了提高请假效率,很多企业会采用自动化的请假系统,在这些系统中,需要对请假的时长和天数进行计算,这其实并不简单。因为请假时长需要排除工作时间及午休时间,而请假天数需要排除周六周日。接下来,本文将介绍一个可以计算请假时长、天数的简单且实用的方法。

2. 计算请假时长

为了计算请假时长,首先需要获取员工的请假信息,包括请假的开始时间和结束时间。接下来,需要将这两个时间转换为时间戳,然后相减就可以得到请假时长了。但是,需要排除工作时间及午休时间。一般情况下,工作时间为周一到周五的9:00到18:00,午休时间为12:00到13:00。因此,在计算请假时长时,需要将工作时间及午休时间从请假时长中减去。

代码实现如下:

def calculate_leave_duration(start_time, end_time):
  # 将时间转换为时间戳
  start_timestamp = datetime.datetime.strptime(start_time, '%Y-%m-%d %H:%M:%S').timestamp()
  end_timestamp = datetime.datetime.strptime(end_time, '%Y-%m-%d %H:%M:%S').timestamp()

  # 计算请假时长
  leave_duration = end_timestamp - start_timestamp

  # 排除工作时间及午休时间
  work_start_time = datetime.datetime.strptime('09:00:00', '%H:%M:%S').timestamp()
  work_end_time = datetime.datetime.strptime('18:00:00', '%H:%M:%S').timestamp()
  lunch_start_time = datetime.datetime.strptime('12:00:00', '%H:%M:%S').timestamp()
  lunch_end_time = datetime.datetime.strptime('13:00:00', '%H:%M:%S').timestamp()

  for i in range(5):
    day_start_timestamp = start_timestamp + i * 24 * 3600
    day_end_timestamp = start_timestamp + (i + 1) * 24 * 3600

    if day_start_timestamp <= work_start_time <= day_end_timestamp:
      leave_duration -= work_start_time - day_start_timestamp

    if day_start_timestamp <= work_end_time <= day_end_timestamp:
      leave_duration -= day_end_timestamp - work_end_time

    if day_start_timestamp <= lunch_start_time <= day_end_timestamp:
      leave_duration -= lunch_start_time - day_start_timestamp

    if day_start_timestamp <= lunch_end_time <= day_end_timestamp:
      leave_duration -= day_end_timestamp - lunch_end_time

  return leave_duration

3. 计算请假天数

为了计算请假天数,首先需要获取员工的请假信息,包括请假的开始日期和结束日期。接下来,需要将这两个日期转换为日期戳,然后相减就可以得到请假天数了。但是,需要排除周六周日。因此,在计算请假天数时,需要将周六周日从请假天数中减去。

代码实现如下:

def calculate_leave_days(start_date, end_date):
  # 将日期转换为日期戳
  start_timestamp = datetime.datetime.strptime(start_date, '%Y-%m-%d').timestamp()
  end_timestamp = datetime.datetime.strptime(end_date, '%Y-%m-%d').timestamp()

  # 计算请假天数
  leave_days = (end_timestamp - start_timestamp) / (24 * 3600)

  # 排除周六周日
  for i in range((leave_days + 1).days):
    day_timestamp = start_timestamp + i * 24 * 3600
    day = datetime.datetime.fromtimestamp(day_timestamp).strftime('%w')
    if day == '6' or day == '7':
      leave_days -= 1

  return leave_days

4. 实例

现在,让我们通过一个实例来演示一下如何使用这些方法。假设某员工的请假信息如下:

  • 请假的开始时间:2023-08-01 09:00:00
  • 请假的结束时间:2023-08-03 18:00:00

那么,他的请假时长为:

leave_duration = calculate_leave_duration('2023-08-01 09:00:00', '2023-08-03 18:00:00')
print(leave_duration)

输出结果为:

54000

这表示他的请假时长为54000秒,也就是15个小时。

他的请假天数为:

leave_days = calculate_leave_days('2023-08-01', '2023-08-03')
print(leave_days)

输出结果为:

2

这表示他的请假天数为2天。

5. 结语

本文介绍了一个可以计算请假时长、天数的简单且实用的方法。时长统计去除了工作时间及午休时间,天数去除了周六周日。代码实现简单易懂,可供参考。希望本文对您有所帮助。