2016-03-03 6 views
0

Я получаю дату «2016-03-03T05: 11: 56». Я хочу показать это как формат даты RFC 2822 (Thu, 03 Mar 2016 05:11:56 GMT). Как добиться этого в XSLT 1.0 Любая помощь appreciated.Thank вы всепреобразовать формат даты ISO в формат RFC 2822 в XSLT

+0

Привет, я пробовал один подход, но в этом году високосный год, поэтому моя логика не работает должным образом. – user3734430

+0

Имейте в виду, что это распространенная проблема, поэтому, возможно, есть некоторые библиотеки, которые вы можете использовать для этого. Еще раз, используйте Google, чтобы найти их. – SubliemeSiem

ответ

0

Предполагая, что ваши DateTimes не содержат временные смещения или доли секунд, вы могли бы использовать что-то вроде:

<xsl:template name="dateTime-to-RFC-2822"> 
    <xsl:param name="dateTime"/> 
    <!-- extract components --> 
    <xsl:variable name="year" select="substring($dateTime, 1, 4)" /> 
    <xsl:variable name="month" select="substring($dateTime, 6, 2)" /> 
    <xsl:variable name="day" select="substring($dateTime, 9, 2)" /> 
    <!-- calculate day-of-week using Zeller's_congruence --> 
    <xsl:variable name="a" select="$month &lt; 3"/> 
    <xsl:variable name="m" select="$month + 12*$a"/> 
    <xsl:variable name="y" select="$year - $a"/> 
    <xsl:variable name="K" select="$y mod 100"/> 
    <xsl:variable name="J" select="floor($y div 100)"/> 
    <xsl:variable name="h" select="($day + floor(13*($m + 1) div 5) + $K + floor($K div 4) + floor($J div 4) + 5*$J + 6) mod 7"/> 
    <!-- construct output --> 
    <xsl:value-of select="substring('SunMonTueWedThuFriSat', 3 * $h + 1, 3)"/> 
    <xsl:text>, </xsl:text> 
    <xsl:value-of select="$day"/> 
    <xsl:text> </xsl:text> 
    <xsl:value-of select="substring('JanFebMarAprMayJunJulAugSepOctNovDec', 3 * ($month - 1) + 1, 3)"/> 
    <xsl:text> </xsl:text> 
    <xsl:value-of select="$year"/> 
    <xsl:text> </xsl:text> 
    <xsl:value-of select="substring-after($dateTime, 'T')" /> 
    <xsl:text> GMT</xsl:text> 
</xsl:template> 

Примечание: I предположим, что суффикс GMT устарел, и вместо этого вы должны использовать +0000.

+0

Спасибо, майкл, его работы отлично – user3734430

+0

@ user3734430 Если на ваш вопрос ответили, пожалуйста, закройте его, приняв ответ. –

Смежные вопросы