XSL 将时间值转换为“分钟/小时/天前”格式

发布于 2024-10-21 02:43:41 字数 176 浏览 5 评论 0原文

我有一个 XML 提要,正在使用 XSL 对其进行转换。 XML 中每个帖子的日期采用以下格式:

2011-03-09T10:44:27Z

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

I have an XML feed that I'm transforming using XSL. The date for each post from the XML comes in this format:

2011-03-09T10:44:27Z

I'd like to be able to convert it into "50 minutes ago" or "3 days ago" format, is this possible just using XSL or is PHP the 'only' option ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

何以笙箫默 2024-10-28 02:43:41

通过 XSLT 1.0,使用 Jenny Tenison 纯 XSLT 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
</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

With XSLT 1.0 use Jenny Tenison pure XSLT implementation of EXSLT date:difference().

As proof of concept, this stylesheet:

<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
</xsl:text>
    </xsl:template>
</xsl:stylesheet>

With this input:

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

Output:

4 hours 15 minutes ago
28 days 4 hours 15 minutes ago
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文