Формат даты JD Edwards (который часто называют неправильно как формат даты JDE Julian ) - это формат CYYDDD
, где:
C
- это число, обозначающее столетие: значение 0 соответствует годам с 1900 по 1999 год, значение 1 год с 2000 по 2099 год и т. Д .;
YY
обозначает год в данном веке;
DDD
- номер дня в данном году.
Таким образом, например, дата 2019-07-02
будет представлена как 119183
.
Чтобы преобразовать дату в формате YYYY-MM-DD
в формат даты JD Edwards, используя XSLT 1.0, , вы можете использовать:
<xsl:template name="date-to-JDE">
<xsl:param name="date"/>
<xsl:variable name="year" select="substring($date, 1, 4)"/>
<xsl:variable name="month" select="substring($date, 6, 2)"/>
<xsl:variable name="day" select="substring($date, 9, 2)"/>
<xsl:variable name="C" select="floor($year div 100) - 19"/>
<xsl:variable name="YY" select="$year mod 100"/>
<xsl:variable name="leap" select="not($year mod 4) and $year mod 100 or not($year mod 400)" />
<xsl:variable name="elapsed-months" select="substring('000031059090120151181212243273304334', 3 * ($month - 1) + 1, 3)"/>
<xsl:variable name="DDD" select="$elapsed-months + ($month > 2 and $leap) + $day"/>
<xsl:value-of select="$C * 100000 + $YY * 1000 + $DDD"/>
</xsl:template>
Демо : https://xsltfiddle.liberty -development.net / jyRYYj8
Добавлено:
Если вам действительно нужен ГГГГДДД, то вы можете упростить приведенное выше до:
<xsl:template name="date-to-YYYYDDD">
<xsl:param name="date"/>
<xsl:variable name="year" select="substring($date, 1, 4)"/>
<xsl:variable name="month" select="substring($date, 6, 2)"/>
<xsl:variable name="day" select="substring($date, 9, 2)"/>
<xsl:variable name="leap" select="not($year mod 4) and $year mod 100 or not($year mod 400)" />
<xsl:variable name="elapsed-months" select="substring('000031059090120151181212243273304334', 3 * ($month - 1) + 1, 3)"/>
<xsl:variable name="DDD" select="$elapsed-months + ($month > 2 and $leap) + $day"/>
<xsl:value-of select="$year * 1000 + $DDD"/>
</xsl:template>