Главная » XSLT » Вычисление номера недели, соответствующего заданной дате

0

Задача

Требуется найти номер недели года, в которую попадает заданная дата.

Решение XSLT 1.0

Номер недели изменяется в диапазоне от 1 до 53. В большинстве годов коли­чество недель равно 52, но в тех, которые содержат 53 четверга, недель тоже 53. Для решения воспользуемся шаблоном вычисления юлианского дня:

<xsl:template name="ckbk:calculate-week-number"> <xsl:param name="year"/> <xsl:param name="month"/> <xsl:param name="day"/>

<xsl:variable name="j-day">

<xsl:call-template name="ckbk:calculate-julian-day"> <xsl:with-param name="year" select="$year"/> <xsl:with-param name="month" select="$month"/> <xsl:with-param name="day" select="$day"/> </xsl:call-template> </xsl:variable>

<xsl:variable name="d4"

select="($j-day + 31741 – ($j-day mod 7)) mod 146097 mod 36524 mod 1461"/> <xsl:variable name="L" select="floor($d4 div 1460)"/>

<xsl:variable name="d1" select="(($d4 – $L) mod 365) + $L"/>

<xsl:value-of select="floor($d1 div 7) + 1"/> </xsl:template>

В этой функции предполагается, что неделя начинается с понедельника. В большинстве же функций в этой главе используется более распростра­ненное соглашение о том, что первый день недели – воскресенье. Объясне­ние этой странности см. в рецептах, относящихся к календарю ISO.

XSLT 2.0

Воспользуемся функцией format-date():

<xsl:function name="ckbk:calculate-week-number" as="xs:integer"> <xsl:param name="date" as="xs:date"/>

<xsl:sequence select="xs:integer(format-date($date,'[W]’))"/> </xsl:function>

Обсуждение

Номер недели – это число, сопоставляемое каждой неделе года. Первой в году считается неделя, содержащая 4 января, или, что эквивалентно, неделя, в которую попадает первый четверг января. Неделя, которая начинается в одном году, а закан­чивается в следующем, считается относящейся к тому году, в который попадает больше дней. Такое происходит, когда год начинается с четверга или, если он висо­косный, со среды. В США это соглашение в настоящее время не применяется.

См. также

См. рецепт 4.8 выше в этой главе.

Мангано Сэл  XSLT. Сборник рецептов. – М.: ДМК Пресс, СПБ.: БХВ-Петербург, 2008. – 864 с.: ил.

По теме:

  • Комментарии