2011-03-09 4 views
2

XSL을 사용하여 변환하는 XML 피드가 있습니다.시간 값을 "분/시간/일 전"형식으로 변환하는 XSL

2011-03-09T10 : 다음 XML에서 각 게시물에 대한 날짜 형식으로 오는 44 : 27Z를

나는 "분 전"으로 변환 할 수 있도록하고 싶습니다

또는 "3 일 전"형식을 사용하는 것은 XSL 만 사용하거나 PHP를 '유일한'옵션으로 사용할 수 있습니까?

+1

는 XSLT 1.0 또는 2.0를 사용하십니까? – Flack

+0

당신의 목표는 무엇입니까? 웹 페이지라면 javascript가 옵션으로 제공됩니다. – justkt

+0

이것은 최종 배포의 특성상 XSL 1.0, JS를 사용하지 않습니다. – BobFlemming

답변

7

XSLT 1.0에서는 EXSLT date:difference()의 Jenny Tenison pure XSLT implementation을 사용합니다.

개념의 증거로,이 스타일이 입력으로

<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 
+0

+1 바퀴를 다시 발명하지 않았기 때문입니다. – Flack

+2

@Flack : "우리는 거인의 어깨에 서 있습니다." –

+0

교과서 답변, 감사합니다. – BobFlemming

관련 문제