Учитывая, что ваши startDate и endDate имеют формат «ГГГГ-мм-дд», вы можете просто удалить дефисы и выполнить числовое сравнение:
<xsl:variable name="numericCurrentDate"
select="number(translate($currentDate, '-', ''))"/>
<xsl:if test="$numericCurrentDate >= number(translate(startDate, '-', '')) and
number(translate(endDate, '-', '')) >= $numericCurrentDate">...
(Благодаря http://www.dpawson.co.uk/xsl/sect2/N7218.html)
Обратите внимание, translate(string, 'abcde...', '')
возвращает копию строки аргумента с удаленными вхождениями символов 'abcde ...'.
В качестве альтернативы , вы можете использовать функции расширения. PHP XSLT (использующий libxslt) должен поддерживать такие расширения, как дата EXSLT: разница везде, где документы говорят, что они реализованы libxslt ... что они и делают в этом случае.
Функция date: разность возвращает
продолжительность между первым свиданием
и второе свидание. Если первое свидание
происходит до второго свидания, затем
результат - положительная продолжительность; если
это происходит после второго свидания,
результат - отрицательная продолжительность.
Таким образом, вы можете использовать:
<xsl:variable name="currentDate" select="date:date()" />
<xsl:for-each select="...">
<xsl:if test="starts-with(date:difference($currentDate, startDate), '-') and
starts-with(date:difference(endDate, $currentDate), '-')">
Do something with publication...
Обратите внимание, что EXSLT предоставляет нам как функцию для получения текущей даты, поэтому нам не нужно передавать ее в качестве параметра, так и способ сравнения двух дат.
Информацию о том, как использовать модуль даты в EXSLT, в том числе о том, как объявлять пространство имен, смотрите в EXSLT документах . Обратите внимание, что функции EXSLT поддерживаются не всеми процессорами XSLT, поэтому вам придется пожертвовать некоторой переносимостью.