如何修改DATEDIF公式将天数差转换为周/月/年前的时间表述
修改后公式(中文表述,适配原表格逻辑)
优先推荐使用更高效的LET函数版本(减少重复查询,性能更好):
=IFERROR( ARRAYFORMULA( IF(LEN(A3:A), LET( past_date, VLOOKUP(A3:A, Backend!A2:U, 18, FALSE), diff_days, DATEDIF(past_date, TODAY(), "D"), diff_weeks, ROUNDDOWN(diff_days/7), diff_months, DATEDIF(past_date, TODAY(), "M"), diff_years, DATEDIF(past_date, TODAY(), "Y"), IFS( diff_years >= 1, diff_years & "年前", diff_months >= 1, diff_months & "个月前", diff_weeks >= 1, diff_weeks & "周前", TRUE, diff_days & "天前" ) ), ) ), )
兼容版公式(不支持LET函数的老版本表格可用)
=IFERROR( ARRAYFORMULA( IF(LEN(A3:A), IFS( DATEDIF(VLOOKUP(A3:A, Backend!A2:U, 18, FALSE), TODAY(), "Y")>=1, DATEDIF(VLOOKUP(A3:A, Backend!A2:U, 18, FALSE), TODAY(), "Y")&"年前", DATEDIF(VLOOKUP(A3:A, Backend!A2:U, 18, FALSE), TODAY(), "M")>=1, DATEDIF(VLOOKUP(A3:A, Backend!A2:U, 18, FALSE), TODAY(), "M")&"个月前", ROUNDDOWN(DATEDIF(VLOOKUP(A3:A, Backend!A2:U, 18, FALSE), TODAY(), "D")/7)>=1, ROUNDDOWN(DATEDIF(VLOOKUP(A3:A, Backend!A2:U, 18, FALSE), TODAY(), "D")/7)&"周前", TRUE, DATEDIF(VLOOKUP(A3:A, Backend!A2:U, 18, FALSE), TODAY(), "D")&"天前" ), ) ), )
逻辑说明
- 时间展示优先级:年 > 月 > 周 > 天,符合日常表述习惯
- 保留了原公式的数组特性,仅需在首个单元格输入即可自动填充A列有值的所有行
- 完全兼容Backend表R列
m/d/yyyy H:i:s格式的原始时间数据,无需额外做格式转换
内容的提问来源于stack exchange,提问作者Miyer
相关产品推荐
相关产品推荐

