Вам не нужна числовая функция, если два текстовых значения являются числами, она просто сравнивает их, как если бы они были.
Я подозреваю, что вашей проблемой может быть использование <=
в качестве компаратора; вам нужно будет вместо <
с <
использовать <=
.
Что касается разницы в датах, я использую этот шаблон (Xslt 1.0):
<xsl:template name="calcdays">
<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:value-of select="(($year - 1970) * 365) + floor(($year - 1969) div 4) + substring('000,031,059,090,120,151,181,212,243,273,304,334,365',($month * 4) - 3,3) + ($day - 1) + (1 - floor((($year mod 4) + 2) div 3))*floor(($month + 17) div 20)" />
</xsl:template>
</xsl:stylesheet>
для определения количества дней, начиная с 1 января 1970 года, при условии, что передаваемый параметр имеет вид yyyy-mm-dd
В любой другой форме вы можете настроить подстроки.
Назовите этот шаблон со строками даты и передайте результаты в переменные, и вы можете сделать прямое сравнение с $later - $earlier <= 30
.