Как конвертировать 2009-09-18 в 18 сентября в xslt - PullRequest
0 голосов
/ 17 сентября 2009

хотите знать Как конвертировать 2009-09-18 в 18 сентября в xslt? Спасибо.

Ответы [ 5 ]

5 голосов
/ 17 сентября 2009

Вот чистое решение XSLT 1.0, которое предполагает допустимый ввод:

<xsl:template match="/">
    <newdate>
        <xsl:call-template name="convertdate">
            <xsl:with-param name="date" select="date"/>
        </xsl:call-template>
    </newdate>
</xsl:template>

<xsl:template name="convertdate">   
    <xsl:param name="date"/>

    <xsl:variable name="day">
        <xsl:value-of select="number(substring-after(substring-after($date,'-'), '-'))"/>
    </xsl:variable>

    <xsl:variable name="suffix">
        <xsl:choose>
            <xsl:when test="$day = '1'">st</xsl:when>
            <xsl:when test="substring($day, string-length($day), 1) = '1' and not(starts-with($day, '1'))">st</xsl:when>
            <xsl:when test="substring($day, string-length($day), 1) = '2' and not(starts-with($day, '1'))">nd</xsl:when>
            <xsl:when test="substring($day, string-length($day), 1) = '3' and not(starts-with($day, '1'))">rd</xsl:when>
            <xsl:otherwise>th</xsl:otherwise>
        </xsl:choose>
    </xsl:variable>

    <xsl:variable name="mo">
        <xsl:value-of select="number(substring-before(substring-after($date,'-'), '-'))"/>
    </xsl:variable>     

    <xsl:variable name="month">
        <xsl:choose>
            <xsl:when test="$mo = 1">Jan</xsl:when>
            <xsl:when test="$mo = 2">Feb</xsl:when>
            <xsl:when test="$mo = 3">Mar</xsl:when>
            <xsl:when test="$mo = 4">Apr</xsl:when>
            <xsl:when test="$mo = 5">May</xsl:when>
            <xsl:when test="$mo = 6">Jun</xsl:when>
            <xsl:when test="$mo = 7">Jul</xsl:when>
            <xsl:when test="$mo = 8">Aug</xsl:when>
            <xsl:when test="$mo = 9">Sept</xsl:when>
            <xsl:when test="$mo = 10">Oct</xsl:when>
            <xsl:when test="$mo = 11">Nov</xsl:when>
            <xsl:when test="$mo = 12">Dec</xsl:when>
        </xsl:choose>
    </xsl:variable>

    <xsl:value-of select="$day"/><xsl:value-of select="$suffix"/>&#160;<xsl:value-of select="$month"/>

</xsl:template>
1 голос
/ 17 сентября 2009

EXSLT имеет некоторые функции расширения для преобразования строк даты, см .: http://exslt.org/date/index.html

Если повезет, ваш XSLT-процессор поддерживает их изначально, в противном случае большинство функций даты имеют простую реализацию XSLT 1.0, которую вы можете включить

0 голосов
/ 17 сентября 2009

В соответствии с:

<xsl:template name="friendly-date">
  <xsl:param name="datestring" select="'yyyy-mm-dd'" />

  <xsl:variable name="y" select="number(substring-before($datestring, '-'))" />
  <xsl:variable name="r" select="number(substring-after($datestring, '-'))" />
  <xsl:variable name="m" select="number(substring-before($r, '-'))" />
  <xsl:variable name="d" select="number(substring-after($r, '-'))" />

  <xsl:choose>
    <xsl:when test="
      $y &gt;= 1970 and $y &lt;= 9999
      and
      $m &gt;= 1 and $m &lt;= 12
      and
      $d &gt;= 1 and $m &lt;= 31
    ">
      <xsl:value-of select="$d" />
      <xsl:text> </xsl:text>
      <xsl:choose>
        <xsl:when test="$m = 1">
          <xsl:value-of select="'Jan'" />
        </xsl:when>
        <!-- ... insert missing ... -->
        <xsl:when test="$m = 12">
          <xsl:value-of select="'Dec'" />
        </xsl:when>
      </xsl:choose>
      <xsl:text> </xsl:text>
      <xsl:value-of select="$y" />
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="$datestring" />
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

Помните, что это не проверит невозможные даты. От вашего участия зависит, может ли это стать проблемой или нет.

Кроме того, он не поддерживает международные форматы дат. Для менее специальных решений я рекомендую взглянуть на EXSLT, как и другие.

0 голосов
/ 17 сентября 2009

Использование именованного шаблона с большим <xsl:choose> звучит как подходящее решение здесь. Сложная часть - название месяца, остальное довольно тривиально, верно? Конечно, у вас нет , чтобы отделить его от названного шаблона.

0 голосов
/ 17 сентября 2009

на каком языке работает ваш бэкэнд?

Если это PHP, легко форматировать строки DATETIME с помощью функции date (): http://uk.php.net/manual/en/function.date.php

Вы можете отформатировать дату перед ее передачей в XML-форму.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...