XSL конвертирует значение времени в формат «минуты / часы / дни назад» - PullRequest
2 голосов
/ 09 марта 2011

У меня есть фид XML, который я преобразую с помощью XSL.Дата для каждого сообщения из XML указывается в следующем формате:

2011-03-09T10: 44: 27Z

Я хотел бы иметь возможность преобразовать егов формат "50 минут назад" или "3 дня назад", возможно ли это только с помощью XSL или PHP - единственный вариант?

1 Ответ

7 голосов
/ 09 марта 2011

С XSLT 1.0 используйте Jenny Tenison pure 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&#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
...