You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Python实现患者预约提前2周2天邮件提醒的日期筛选

解决预约邮件提醒的日期筛选问题

没问题,我来帮你搞定这个日期筛选的核心逻辑!其实关键在于把字符串格式的日期转换成可计算的日期对象,然后通过时间差来判断哪些患者需要触发提醒。下面一步步给你拆解:

第一步:统一日期格式,转换成可计算的对象

首先,你需要把字典里的appointment_date字段(不管是字符串还是其他格式)转换成Python的datetime或date对象——因为字符串没法直接做日期加减运算。假设你的日期是YYYY-MM-DD这种ISO格式,代码可以这么写:

from datetime import datetime, timedelta

# 示例:模拟你的results列表
results = [
    {"patient_id": 1, "appointment_date": "2024-06-20", "name": "张三"},
    {"patient_id": 2, "appointment_date": "2024-05-30", "name": "李四"},
    # 剩下48个患者...
]

第二步:计算提醒触发的时间阈值

你需要提前2周零2天发送提醒,也就是**预约日期减去16天(14+2)**的那天,就是你需要发送邮件的时间。我们可以用timedelta来计算这个时间差:

# 获取当前日期(如果需要精确到时间,就用datetime.now(),这里先只取日期部分)
today = datetime.today().date()

# 定义提醒间隔:2周零2天
reminder_interval = timedelta(weeks=2, days=2)

第三步:筛选符合条件的患者

遍历你的results列表,逐个计算每个患者的预约日期和当前日期的差值,判断是否刚好到达提醒时间:

patients_to_remind = []

for patient in results:
    # 将字符串日期转成date对象(如果你的日期带时间,就用'%Y-%m-%d %H:%M:%S'格式)
    appt_date = datetime.strptime(patient["appointment_date"], "%Y-%m-%d").date()
    
    # 计算距离预约还有多少天
    days_left = (appt_date - today).days
    
    # 关键判断:刚好提前16天的时候触发提醒
    if days_left == 16:
        patients_to_remind.append(patient)

# 现在patients_to_remind里就是需要发邮件的患者啦
print(f"需要发送提醒的患者数量:{len(patients_to_remind)}")

一些需要注意的细节

  • 时区问题:如果你的系统用UTC时间存储预约日期,记得用datetime.now(timezone.utc)来获取当前UTC时间,避免时区偏差导致提醒发送错误。
  • 带时间的预约:如果预约日期精确到时分秒,建议用datetime对象而不是date来计算,比如判断「预约时间减去16天的时间是否在今天的范围内」,避免因为时间差导致提前或延后发送。
  • 异常处理:如果存在格式不规范的日期字符串,可以加个try-except块跳过错误数据,避免脚本崩溃:
    try:
        appt_date = datetime.strptime(patient["appointment_date"], "%Y-%m-%d").date()
    except ValueError:
        print(f"患者{patient['patient_id']}的预约日期格式错误,跳过")
        continue
    

内容的提问来源于stack exchange,提问作者zx123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:31:53