筛选今日前后X天内的行:生日与纪念日列表处理需求
筛选今日前后X天内的生日/纪念日记录
原始按序排列的生日/纪念日列表:
8/14/2023 Person 1 (26) 8/18/2023 Person 2 (15) 9/29/2023 Person 3 (44) 10/3/2023 Person 4 (4) 10/26/2023 Person 5 (13) 11/6/2023 Person 6 (13) 11/11/2023 Person 7 (2) 11/12/2023 Person 8 Anniversary (40)
方法一:用Excel/Google Sheets快速筛选
- 先把数据整理成两列:A列放日期,B列放人员/纪念日备注。
- 假设要筛选今日前后7天的记录(把7换成你需要的X值即可),在C1单元格输入公式:
=AND(A1>=TODAY()-7, A1<=TODAY()+7) - 把公式下拉到所有行,C列显示
TRUE的就是符合条件的记录。 - 选中整个数据区域,点击「数据」→「筛选」,筛选C列为
TRUE的行,就能得到目标列表。
如果是每年重复的生日/纪念日(只看月日,不看年份),用这个公式判断:
=AND(DATEDIF(TODAY(), DATE(YEAR(TODAY()), MONTH(A1), DAY(A1)), "d")<=7, DATEDIF(TODAY(), DATE(YEAR(TODAY()), MONTH(A1), DAY(A1)), "d")>=-7)
方法二:用Python脚本批量处理
如果数据是文本格式,写个简单脚本就能自动筛选:
from datetime import datetime, timedelta # 原始数据 raw_records = [ "8/14/2023 Person 1 (26)", "8/18/2023 Person 2 (15)", "9/29/2023 Person 3 (44)", "10/3/2023 Person 4 (4)", "10/26/2023 Person 5 (13)", "11/6/2023 Person 6 (13)", "11/11/2023 Person 7 (2)", "11/12/2023 Person 8 Anniversary (40)" ] # 设置前后天数范围 X = 7 today = datetime.today() start = today - timedelta(days=X) end = today + timedelta(days=X) # 筛选符合条件的记录 filtered = [] for line in raw_records: date_part, name_part = line.split(" ", 1) record_date = datetime.strptime(date_part, "%m/%d/%Y") if start <= record_date <= end: filtered.append(line) # 输出结果 print("筛选后的记录:") for item in filtered: print(item)
运行后会直接输出今日前后X天内的记录。如果需要忽略年份,修改日期判断逻辑,只比较月日即可。
内容的提问来源于stack exchange,提问作者Mathias
相关产品推荐
相关产品推荐

