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

如何在Google Data Studio中计算PM到AM跨次日的小时时长

问题根因

原有公式的逻辑是将起止12小时制时间转换为当日0点对应的总秒数后直接相减,跨天场景下结束时间的当日秒数会小于开始时间,得到负值结果,无法输出正确时长。

调整方案

对计算得到的秒数差取模86400(1天的总秒数),当差值为负时,取模运算会自动叠加1天的秒数,得到正确的跨天时长,再根据需求转换为小时/分钟单位即可。

调整后完整公式

输出秒级时长

MOD(
((CAST(REGEXP_EXTRACT(End Time,"^(\\d+):")AS NUMBER)*60*60) + (CAST(REGEXP_EXTRACT(End Time,"^\\d+:(\\d+)")AS NUMBER)*60) + NARY_MAX(CAST(REGEXP_REPLACE(End Time,".*(PM)$","43200")AS NUMBER),0)) -
((CAST(REGEXP_EXTRACT(Start Time,"^(\\d+):")AS NUMBER)*60*60) + (CAST(REGEXP_EXTRACT(Start Time,"^\\d+:(\\d+)")AS NUMBER)*60) + NARY_MAX(CAST(REGEXP_REPLACE(Start Time,".*(PM)$","43200")AS NUMBER),0)),
86400
)

输出小时级时长

在秒级公式基础上除以3600即可:

MOD(
((CAST(REGEXP_EXTRACT(End Time,"^(\\d+):")AS NUMBER)*60*60) + (CAST(REGEXP_EXTRACT(End Time,"^\\d+:(\\d+)")AS NUMBER)*60) + NARY_MAX(CAST(REGEXP_REPLACE(End Time,".*(PM)$","43200")AS NUMBER),0)) -
((CAST(REGEXP_EXTRACT(Start Time,"^(\\d+):")AS NUMBER)*60*60) + (CAST(REGEXP_EXTRACT(Start Time,"^\\d+:(\\d+)")AS NUMBER)*60) + NARY_MAX(CAST(REGEXP_REPLACE(Start Time,".*(PM)$","43200")AS NUMBER),0)),
86400
)/3600
注意事项
  • 该方案仅支持跨1天的时长计算,如果你的业务存在跨2天及以上的场景,需要在Google Sheets中补充存储起止时间对应的日期字段,结合日期计算总差值,仅用时间字段无法判断跨天天数。
  • 请确保你的End Time和Start Time字段格式统一为带AM/PM标识的12小时制时间,避免正则提取出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:45:03