如何将XSLT计算的毫秒时间戳差值转换为整数秒?
解决XSLT中毫秒时间戳差值取整数秒的问题
嘿,这个问题其实很容易搞定,有两种靠谱的思路帮你得到想要的整数秒结果:
思路1:基于你现有的dateTime转换逻辑优化
如果你已经把两个时间戳转换成了xs:dateTime类型的$start和$end变量,可以通过计算时间差的秒数后取整来实现:
<!-- 先补全你的end变量定义 --> <xsl:variable name="end" select='xs:dateTime("1970-01-01T00:00:00") + 1519077045841 * xs:dayTimeDuration("PT0.001S")'/> <!-- 计算两个时间的间隔 --> <xsl:variable name="time-difference" select="$end - $start"/> <!-- 将间隔转换为秒数并向下取整(截断小数部分) --> <xsl:variable name="integer-seconds" select="floor(xs:decimal($time-difference div xs:dayTimeDuration('PT1S')))"/>
这里的关键是floor()函数,它会把带小数的秒数直接截断为整数,刚好符合你要的3秒结果。
思路2:直接计算毫秒差(更高效)
其实不用转成xs:dateTime也能搞定,因为时间戳本身就是毫秒数,直接计算差值再除以1000取整更高效:
<xsl:variable name="timestamp-start" select="1519077042063"/> <xsl:variable name="timestamp-end" select="1519077045841"/> <!-- 计算毫秒差后除以1000,再取整 --> <xsl:variable name="integer-seconds" select="floor(($timestamp-end - $timestamp-start) div 1000)"/>
这种方法跳过了dateTime的转换步骤,性能更好,结果同样是3秒,完全满足你的需求。
内容的提问来源于stack exchange,提问作者J. Hradek
相关产品推荐
相关产品推荐

