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

如何在XSLT中计算两个给定时间的时间差?

计算手术时间差并格式化显示为“Xh Ym”格式

问题说明

现有如下XML数据,需要计算手术开始与结束时间的差值,并以2h 52m的格式输出:

<Surgery>
   <SURGERY_START_TIME>9:02</SURGERY_START_TIME>
   <SURGERY_STOP_TIME>11:45</SURGERY_STOP_TIME>
</Surgery>

原尝试的XSLT代码无法运行,核心原因是直接对时间字符串做减法无效——XSLT不会自动将9:02这类字符串解析为可计算的时间数值。

解决方案

通过手动拆分时间的小时和分钟,转换为总分钟数后计算差值,再转回小时+分钟的格式:

XSLT 1.0 实现代码

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/Surgery">
        <!-- 计算开始时间总分钟数 -->
        <xsl:variable name="start-hour" select="substring-before(SURGERY_START_TIME, ':')" />
        <xsl:variable name="start-minute" select="substring-after(SURGERY_START_TIME, ':')" />
        <xsl:variable name="start-total" select="$start-hour * 60 + $start-minute" />

        <!-- 计算结束时间总分钟数 -->
        <xsl:variable name="stop-hour" select="substring-before(SURGERY_STOP_TIME, ':')" />
        <xsl:variable name="stop-minute" select="substring-after(SURGERY_STOP_TIME, ':')" />
        <xsl:variable name="stop-total" select="$stop-hour * 60 + $stop-minute" />

        <!-- 计算时间差总分钟数 -->
        <xsl:variable name="diff-total" select="$stop-total - $start-total" />

        <!-- 转换为小时和剩余分钟 -->
        <xsl:variable name="diff-hour" select="floor($diff-total div 60)" />
        <xsl:variable name="diff-minute" select="$diff-total mod 60" />

        <!-- 拼接输出目标格式 -->
        <xsl:value-of select="concat($diff-hour, 'h ', $diff-minute, 'm')" />
    </xsl:template>
</xsl:stylesheet>

代码说明

  • 用substring-before和substring-after分割时间字符串,提取小时、分钟部分
  • 将小时转为分钟后求和,把时间统一为总分钟数,便于计算差值
  • 通过整除+取整得到小时数,取余得到剩余分钟数
  • 用concat拼接成Xh Ym格式的字符串

输出结果

针对给定的XML数据,运行上述代码后会输出:2h 52m

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:50:26