如何在Power Automate中实现Excel短日期与当前日期的条件比较?
问题
我把Excel里名为Date的ShortDate字段导入Power Automate,想设置条件把这个字段和当前日期对比,但试了好几种方法都失败了。当前日期是2025年3月25日,Excel里存的是45741,测试情况如下:
"Date" "is equal to" "45741"(带引号)判断为True;"Date" "is equal to" 45741(不带引号)判断为False;"Date" "is equal to" utcNow()判断为False;"Date" "is equal to" utcNow('yyyy-MM-dd')判断为False。
请问正确的比较语法是什么?看起来系统好像期望字符串格式?
更新说明:我在Excel表格里新增了DateYYYYMMDD列,用公式=TEXT([@Date], "YYYYMMDD")把日期转成"20250325"格式,然后在Power Automate里用这个字段和utcNow('yyyyMMdd')对比,成功实现了需求。能不能直接在Power Automate里执行类似TEXT()的转换操作?不想在Excel里新增列。
解决方案
完全可以直接在Power Automate里完成日期格式转换,无需修改Excel表格,核心是让两边的对比值类型、格式统一,以下两种方式都可行:
方式1:将Excel日期序列号转为标准日期字符串对比
Power Automate可通过addDays()+formatDateTime()组合函数,把Excel返回的字符串类型序列号转成目标格式:
formatDateTime(addDays('1899-12-30', int(triggerBody()?['Date'])), 'yyyyMMdd')
- 先用
int()把Excel返回的字符串序列号转成数字; - 再用
addDays()基于Excel日期起点(1899-12-30,对应序列号0)计算出实际日期; - 最后用
formatDateTime()转成"YYYYMMDD"格式字符串,和utcNow('yyyyMMdd')做相等判断即可。
方式2:将当前日期转为Excel序列号对比
反过来,把当前日期转成Excel的序列号字符串,再和Excel返回的Date字段直接对比:
string(sub(ticks(utcNow('yyyy-MM-dd')), ticks('1899-12-30'))/(864000000000))
- 通过
ticks()计算当前日期与Excel起始日期的时间差; - 除以一天的ticks总数(864000000000)得到序列号;
- 转成字符串后和Excel返回的
"45741"做相等判断。
补充说明
你之前的测试结果差异,本质是类型不匹配导致:
- Excel的ShortDate字段导入Power Automate后是字符串类型的序列号,带引号的"45741"是同类型对比,所以判断为True;
- 不带引号的45741是数字类型,和字段类型不匹配,判断为False;
utcNow()返回日期时间对象,utcNow('yyyy-MM-dd')是标准日期字符串,都和Excel序列号的字符串格式完全不同,因此判断为False。
内容的提问来源于stack exchange,提问作者MrSnrub
相关产品推荐
相关产品推荐

