【问题标题】:XSL converting time value into "minutes/hours/days ago" formatXSL 将时间值转换为“分钟/小时/天前”格式
【发布时间】:2011-03-09 17:30:19
【问题描述】:

我有一个使用 XSL 转换的 XML 提要。 XML 中每个帖子的日期采用以下格式:

2011-03-09T10:44:27Z

我希望能够将其转换为“50 分钟前”或“3 天前”格式,这可能仅使用 XSL 还是 PHP 是“唯一”选项?

【问题讨论】:

  • 你的目标是什么?如果是网页,也可以选择 javascript。
  • 这是使用 XSL 1.0 ,由于最终部署的性质,JS 并不是一个真正的选择。

标签: xml xslt date duration xslt-1.0


【解决方案1】:

使用 XSLT 1.0 使用 Jenny Tenison 纯 XSLT implementation 或 EXSLT date:difference()

作为概念证明,此样式表:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:date="http://exslt.org/dates-and-times">
    <xsl:import href="date.difference.template.xsl"/>
    <xsl:template match="date">
        <xsl:variable name="vDuration">
            <xsl:call-template name="date:difference">
                <xsl:with-param name="start" select="/test/@today" />
                <xsl:with-param name="end" select="." />
            </xsl:call-template>
        </xsl:variable>
        <xsl:variable name="vDays" 
             select="substring-before(substring-after($vDuration,'P'),'D')"/>
        <xsl:variable name="vHours" 
             select="substring-before(substring-after($vDuration,'T'),'H')"/>
        <xsl:variable name="vMinutes" 
             select="substring-before(substring-after($vDuration,'H'),'M')"/>
        <xsl:if test="$vDays">
            <xsl:value-of select="concat($vDays,' days ')"/>
        </xsl:if>
        <xsl:if test="$vHours">
            <xsl:value-of select="concat($vHours,' hours ')"/>
        </xsl:if>
        <xsl:if test="$vMinutes">
            <xsl:value-of select="concat($vMinutes,' minutes ')"/>
        </xsl:if>
        <xsl:text>ago&#xA;</xsl:text>
    </xsl:template>
</xsl:stylesheet>

有了这个输入:

<test today="2011-03-09T15:00:00Z">
    <date>2011-03-09T10:44:27Z</date>
    <date>2011-02-09T10:44:27Z</date>
</test>

输出:

4 hours 15 minutes ago
28 days 4 hours 15 minutes ago

【讨论】:

  • @Flack:“我们站在巨人的肩膀上。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-01
  • 2021-05-11
  • 1970-01-01
  • 2011-02-14
  • 1970-01-01
相关资源
最近更新 更多