Я пытаюсь создать преобразование xsl, которое будет принимать дату, добавить к ней 27 дней и проверить, не падает ли эта новая дата в выходные и если это произойдет, он найдет следующий не выходной день (понедельник) и отобразит его в противном случае, показывая его, как если бы он не выпал на выходные. Возможно ли это, а также это необходимо учитывать високосные годы.Как проверить, выпадает ли дата в выходные в XSLT-файле
ответ
Начиная с даты:
<xsl:variable name="date" select="'2013-09-13T00:40:00'" />
Тогда, судя по всему, вы можете использовать:
<xsl:sequence select="$date +27*xs:dayTimeDuration('P1D')"/>
Но это работает только в XSLT 2.0, которые не имеют.
Вы можете проверить, какой день недели это с помощью:
<xsl:variable name="day-of-week">
<xsl:call-template name="calculate-day-of-the-week"> <!--0-6, where 0=Sun,1=Mon,2=Tue,3=Wed,4=Thu,5=Fri,6=Sat-->
<xsl:with-param name="date-time" select="$date" />
</xsl:call-template>
</xsl:variable>
<xsl:template name="calculate-day-of-the-week">
<xsl:param name="date-time"/>
<xsl:param name="date" select="substring-before($date-time,'T')"/>
<xsl:param name="year" select="substring-before($date,'-')"/>
<xsl:param name="month" select="substring-before(substring-after($date,'-'),'-')"/>
<xsl:param name="day" select="substring-after(substring-after($date,'-'),'-')"/>
<xsl:variable name="a" select="floor((14 - $month) div 12)"/>
<xsl:variable name="y" select="$year - $a"/>
<xsl:variable name="m" select="$month + 12 * $a - 2"/>
<xsl:value-of select="($day + $y + floor($y div 4) - floor($y div 100) + floor($y div 400) + floor((31 * $m) div 12)) mod 7"/>
</xsl:template>
«день-неделю» даст вам значение 0-6 (Sun в сб). Это будет приходиться високосных лет и будет работать в XSLT 1.0
Тогда вы могли бы использовать:
<xsl:if test="day-of-week=0>
<xsl:sequence select="$date +28*xs:dayTimeDuration('P1D')"/>
</xsl:if>
<xsl:if test="day-of-week=6>
<xsl:sequence select="$date +29*xs:dayTimeDuration('P1D')"/>
</xsl:if>
Я не могу проверить этот код без XSLT 2.0, но, надеюсь, это поможет вам идти в общем направление.
+1, хороший ответ. BTW, если вы хотите XSLT 2.0, вы можете скачать Saxon бесплатно из http://sourceforge.net/projects/saxon/ – LarsH
Я собираюсь попробовать это завтра и посмотреть, как это происходит. Вернется с моим результатом. Спасибо за помощь! – Icebreaker
В XSLT 2.0, использовать
test="xs:integer(format-date($date, '[F1]',(), 'ISO',())) ge 6"
Это предполагает, что реализация поддерживает календарь ISO, в котором weakdays пронумерованы от 1 = понедельник 7 = воскресенье.
С другой стороны, возможно, лучше, получить количество дней с известным воскресенье, и принять результат по модулю 7: были предложены
($date - xs:date('1900-MM-DD')) div xs:dateTimeDuration('P1D') mod 7 ge 5
Различные решения XSLT 2.0.
В XSLT 1.0 или 2.0 вы можете использовать шаблон jday
, определенный here, для расчета номера юлианского дня для даты ввода. Добавить 27; сумма - это день юлианского дня дня 27 дней после даты ввода.
Для любого юлианского дня J самым простым способом определить день недели является вычисление J mod 7: если J mod 7 = 0, день - понедельник; если J mod 7 равно 5 или 6, день - суббота или воскресенье.
Чтобы найти следующий понедельник, добавьте соответствующее количество дней и используйте шаблон jdate
, чтобы перевести его с юлианского дня на день.
- 1. Как определить, выпадает ли дата в выходные?
- 2. Проверить, если дата выпадает между некоторым диапазоном
- 3. php определяет, выпадает ли диапазон дат в выходные
- 4. Определите, есть ли дата Oracle в выходные?
- 5. Как я могу узнать, есть ли дата в выходные?
- 6. В python, как проверить, действительна ли дата?
- 7. Как проверить, больше ли дата?
- 8. Как проверить, действительна ли дата?
- 9. Как проверить, действительна ли дата
- 10. Как проверить, прошла ли дата
- 11. Javascript Дата печати выходные
- 12. проверить, действительна ли дата.
- 13. Проверка заданной даты, если он выпадает на выходные
- 14. Открыть следующий месяц, если выбранная дата выпадает в следующем месяце
- 15. Панды Преобразовать Неделя Дата в выходные пятницу Дата
- 16. Формула Excel для суммирования, если дата выпадает в конкретный месяц
- 17. Проверить, есть ли дата в будущем
- 18. Проверить, существует ли дата в списке дат
- 19. Проверить, действительна ли дата JQuery
- 20. Small Basic - Как проверить, прошла ли дата?
- 21. Как проверить, действительно ли введена дата рождения?
- 22. CakePHP 3 - Как проверить, действительна ли дата?
- 23. php проверить, прошла ли дата
- 24. C++ проверить, действительна ли дата
- 25. Как проверить, соответствует ли дата объекту вчера?
- 26. Как проверить, истекает ли дата (PHP)
- 27. Как проверить, текущая ли текущая дата
- 28. Как проверить, существует ли дата сегодня?
- 29. Как проверить, существует ли дата C
- 30. как проверить, соответствует ли сегодняшняя дата = дата из sql?
Почему вы используете XSLT для этого? –
К сожалению, это требование. – Icebreaker
Вы должны получить помощь от http://stackoverflow.com/questions/18306380/how-to-add-5-business-days-to-an-existing-value-xslt/18354063#18354063 –