假设你有一份员工出勤记录的数据,其中包括每个员工的上班日期。你想要计算每个员工的连续上班天数,可以使用以下 Python 函数:
pythonCopy code
from datetime import datetime, timedelta
def calculate_consecutive_days(work_dates):
"""
计算给定员工的连续上班天数。
参数:
work_dates(list): 包含员工出勤日期的列表,日期格式为字符串 '%Y-%m-%d'。
返回值:
int: 给定员工的连续上班天数。
"""
work_dates = sorted([datetime.strptime(d, '%Y-%m-%d') for d in work_dates])
max_consecutive_days = 0
consecutive_days = 1
for i in range(1, len(work_dates)):
if (work_dates[i] - work_dates[i-1]).days == 1:
consecutive_days += 1
else:
max_consecutive_days = max(max_consecutive_days, consecutive_days)
consecutive_days = 1
max_consecutive_days = max(max_consecutive_days, consecutive_days)
return max_consecutive_days
这个函数接受一个包含员工出勤日期的列表作为输入,并返回员工的最长连续上班天数。具体实现方式是将日期字符串转换为 datetime 对象,并对它们进行排序。然后使用一个循环来计算员工的连续上班天数,直到出现不连续的日期为止。在循环过程中,使用一个变量 consecutive_days 来跟踪当前员工的连续上班天数,并使用另一个变量 max_consecutive_days 来跟踪最长连续上班天数。在循环结束后,返回 max_consecutive_days 即可。
以下是一个示例使用场景:
pythonCopy code
work_dates = ['2022-12-01', '2022-12-02', '2022-12-03', '2022-12-05', '2022-12-06', '2022-12-07', '2022-12-08']
max_consecutive_days = calculate_consecutive_days(work_dates)
print(max_consecutive_days) # 输出结果为 3,因为员工在 12 月 5 日、6 日、7 日连续上班了三天。
请注意,这个函数假定日期字符串的格式为 %Y-%m-%d,如果你的日期字符串格式不同,需要相应地调整函数中的格式化字符串。