在 Xslt 1.0 中向日期时间添加 3 小时

Add 3 hours to Datetime in Xslt 1.0

我有一个值 <delivery-at>31-Oct-2020 01:03 PM</delivery-at>,而不是确切时间需要三个小时的时间 window。例如,需要在 xslt

中将值显示为 "31-Oct-2020 01:00 PM - 31-Oct-2020 04:00 PM"

我可以使用以下方法做到这一点

<xsl:template name= "get-expected-eta">
  <xsl:variable name= "etadatetime" select= "delivery-at" />
  <xsl:if test = "$etadatetime != '' ">

     <xsl:variable name= "etadate" select= "substring($etadatetime, 1, 12)" />
     <xsl:variable name= "etatime" select= "substring($etadatetime, 13, 15)" />
     <xsl:variable name= "etahour" select= "substring($etatime, 1, 2)" />
     <xsl:variable name= "etatimecomponent" select= "substring($etatime, 7, 8)" />

    <xsl:variable name= "begin-time">
      <xsl:choose>
        <xsl:when test= "$etatimecomponent='AM'">
            <xsl:choose>
              <xsl:when test= "$etahour = 12">
                  <xsl:value-of select= "00"/>
              </xsl:when>
              <xsl:otherwise>
                  <xsl:value-of select= "$etahour"/>
              </xsl:otherwise>
            </xsl:choose>
        </xsl:when>
        <xsl:otherwise>
          <xsl:choose>
              <xsl:when test= "$etahour = 12">
                  <xsl:value-of select= "$etahour"/>
              </xsl:when>
              <xsl:otherwise>
                  <xsl:value-of select= "$etahour + 12"/>
              </xsl:otherwise>
            </xsl:choose>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:variable>

    <xsl:variable name= "end-time" >
      <xsl:choose>
        <xsl:when test= "$begin-time + 3 &gt;= 24">
            <xsl:value-of select= "($begin-time + 3) - 24"/>
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select= "$begin-time + 3"/>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:variable>

    <xsl:variable name= "from-time" select = "concat($etahour, ' ',$etatimecomponent)"/>

    <xsl:variable name= "to-time">
      <xsl:choose>
        <xsl:when test= "number($end-time) &gt;= 12">
            <xsl:choose>
              <xsl:when test= "$end-time = 12">
                  <xsl:value-of select= "12"/> PM
              </xsl:when>
              <xsl:otherwise>
                  <xsl:value-of select= "$end-time - 12"/> PM
              </xsl:otherwise>
            </xsl:choose>
        </xsl:when>
        <xsl:otherwise>
          <xsl:choose>
              <xsl:when test= "$end-time = 0">
                  <xsl:value-of select= "12"/> AM
              </xsl:when>
              <xsl:otherwise>
                  <xsl:value-of select= "$end-time"/> AM
              </xsl:otherwise>
            </xsl:choose>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:variable>

    <!-- Expected ETA --> 
    <xsl:value-of select = '$etadate'/>(<xsl:value-of select = '$from-time'/> - <xsl:value-of select = '$to-time'/>)
  </xsl:if>
</xsl:template>