Есть ли меньше, чем kludgey способ найти разницу в днях между двумя датами в xslt? Если это так, вы можете указать мне в правильном направлении. Я получаю даты в формате mm/dd/yyyy.Нахождение разницы между двумя датами в xslt
ответ
Использование XSLT 2.0 (XPath 2.0) для этого:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:my="my:my">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:variable name="vDate1"
select="my:dateFromUsDate(/*/d1)"/>
<xsl:variable name="vDate2"
select="my:dateFromUsDate(/*/d2)"/>
<xsl:sequence select=
"($vDate1 - $vDate2) div xs:dayTimeDuration('P1D')"/>
</xsl:template>
<xsl:function name="my:dateFromUsDate" as="xs:date">
<xsl:param name="pUsDate" as="xs:string"/>
<xsl:sequence select=
"xs:date(concat(substring($pUsDate,7,4),
'-',
substring($pUsDate,1,2),
'-',
substring($pUsDate,4,2)
)
)
"/>
</xsl:function>
</xsl:stylesheet>
когда это преобразование применяется на следующий документ XML:
<t>
<d1>04/06/2011</d1>
<d2>01/11/2010</d2>
</t>
разыскиваемый, правильный результат (разность составляет 450 дней) производится:
450
Единственное решение, которое помогло мне с датами на OSB – Tol182
Еще один отличный answser - https://stackoverflow.com/questions/38604414/finding-the-difference-between-two-datetimes-in-xslt –
Более подходящая (и более короткая) альтернатива для XSLT 1.0 заключается в вычислении эквивалентных юлианских дат и вычитании их.
Шаблон:
<xsl:template name="calculate-julian-day">
<xsl:param name="year"/>
<xsl:param name="month"/>
<xsl:param name="day"/>
<xsl:variable name="a" select="floor((14 - $month) div 12)"/>
<xsl:variable name="y" select="$year + 4800 - $a"/>
<xsl:variable name="m" select="$month + 12 * $a - 3"/>
<xsl:value-of select="$day + floor((153 * $m + 2) div 5) + $y * 365 + floor($y div 4) - floor($y div 100) + floor($y div 400) - 32045"/>
Использование:
<xsl:variable name="dateInv" select="'20120406'" />
<xsl:call-template name="calculate-julian-day">
<xsl:with-param name="year" select="substring($date,1,4)"/>
<xsl:with-param name="month" select="substring($date,5,2)"/>
<xsl:with-param name="day" select="substring($date,7,2)"/>
</xsl:call-template>
Повторите для второй даты, и вы будете иметь два целых числа. Затем просто вычтите их.
Это можно легко сделать, используя следующее выражение:
days-from-duration(xs:date('yyyy-MM-dd')-xs:date('yyyy-MM-dd'))
Например:
days-from-duration(xs:date('2012-06-30')-xs:date('2012-06-18'))
даст результат
- 1. Нахождение разницы между двумя датами
- 2. Нахождение разницы в днях между двумя датами
- 3. Нахождение разницы между двумя датами всегда печатает 10
- 4. Расчет разницы между двумя датами
- 5. Вычисление разницы между двумя датами
- 6. получение разницы между двумя датами
- 7. разницы дней между двумя датами
- 8. вычисления разницы между двумя датами
- 9. разницы в годах между двумя датами
- 10. Получение разницы между двумя датами в днях
- 11. Вычисление разницы между двумя датами в днях
- 12. Улучшить алгоритм расчета разницы между двумя датами
- 13. SQL Server - подсчет разницы между двумя датами
- 14. Метод поиска разницы между двумя датами
- 15. минута разницы между двумя датами GMT
- 16. SPARQL Расчет разницы между двумя датами
- 17. Нахождение даты день между двумя датами
- 18. Нахождение разницы во времени между двумя NSDates Swift
- 19. Получение разницы между 2 датами
- 20. Расчет разницы между датами
- 21. Нахождение разницы между двумя последними вставленными строками в MySQL
- 22. Нахождение наибольшей разницы между двумя удвоениями в java без массивов
- 23. Нахождение максимальной разницы между числами
- 24. Разница между двумя датами #
- 25. разницы в дни между двумя датами в C# - возвращает целое
- 26. Добавление разницы между двумя датами в другую дату в php
- 27. Проблема при поиске разницы в днях между двумя датами
- 28. Расчет разницы между двумя датами в SQL Server и DB2
- 29. Получите количество дней разницы между двумя датами в MySQL
- 30. Ошибка при обнаружении разницы между двумя датами в Sybase IQ
Вы застряли с XSLT 1 или может вы использовать XSLT2? –
В XSLT 1.0 у вас есть EXSLT 'date: difference', реализованный Jeni Tennison по адресу http://www.exslt.org/date/functions/difference/date.difference.template.xsl –
Я бы рекомендовал использовать XSLT 2.0/XPath 2.0 для этого. –