Модераторы: diadiavova
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шаблон вычисления количства дней между двух дат, Работа с датами 
:(
    Опции темы
MisterJ
Дата 9.9.2010, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 9.9.2010

Репутация: нет
Всего: нет



Доброго дня, есть небольшая задачка!
Ранее с датами в xslt шаблонах не приходилось пользоваться, но вот появилась задачка и нужно ее решить именно с помощью xslt трансформации.

Есть 2 даты к примеру: 01.01.2010 и 01.02.2010.

Необходимо подсчитать разницу в днях.

Буду очень признателен если хотя бы подскажите направление куда копать или приведете образец шаблона.

Заранее благодарен.
PM MAIL   Вверх
diadiavova
Дата 9.9.2010, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Если надо сделать это чисто средствами XSLT, то вроде встроенных функций для работы с датами нет, а стало быть придется либо вообще всю логику вычислений реализовать самому(а это гемор тот еще), либо использовать какие-нибудь расширения формата, но этот вариант не универсальный.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
MisterJ
Дата 9.9.2010, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 9.9.2010

Репутация: нет
Всего: нет



В том то все и дело, что встроенных функций нет, а на стороне сервера нет возможности пока сделать, сделать нужно побыстрее.

Пока, как временную меру сделал скриптик на javascript, но мне не нравится такая реализация.

Вот и спрашиваю, может кто уже делал такое.
PM MAIL   Вверх
diadiavova
Дата 9.9.2010, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Цитата(MisterJ @  9.9.2010,  18:22 Найти цитируемый пост)
Пока, как временную меру сделал скриптик на javascript, но мне не нравится такая реализация.

При тех условиях, которые ты описал - это оптимальный вариант.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
magelan
Дата 9.9.2010, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


потерял xPath
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 5.4.2010

Репутация: 7
Всего: 16



MisterJ,

для того, чтобы понять, что Дядя Вова абсолютно прав, выкладываю вам архивчик, где я когда-то очень давно реализовывал построение месяцев.
Задачка была академическая, сейчас, бы я ее решал по другому, но она красочно дает понять, что средствами XSL с датами работать не надо.



Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  calendar.zip 3,94 Kb
PM MAIL   Вверх
diadiavova
Дата 11.9.2010, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Если вопрос еще актуален, то вот чойт в голову пришла идея использовать формулу для вычисления юлианского дня. Шаблон выглядит так
Код

    <xsl:template name="jdg">
        <xsl:param name="year"/>
        <xsl:param name="month" />
        <xsl:param name="day" />
        <xsl:param name="hour" select="12"/>
        <xsl:param name="minute" select="0"/>
        <xsl:param name="second" select="0"/>
        <xsl:variable name="j">
            <xsl:choose>
                <xsl:when test="$month &lt; 3">
                    <xsl:value-of select="$year - 1"/>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:value-of select="$year"/>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:variable>
        <xsl:variable name="m">
            <xsl:choose>
                <xsl:when test="$month &lt; 3">
                    <xsl:value-of select="$month + 13"/>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:value-of select="$month"/>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:variable>
        <xsl:variable name="a" select="floor(($second div 60 + $minute) div 60 + $hour) div 24 + $day"/>
            <xsl:value-of select="floor(365.25 * $j) + floor(30.600001 * $m) + $a - 679018.5 + 2400000"/>
    </xsl:template>
    


Принимает 6 параметров, параметры даты обязательные, времени - нет. Возвращает значение юлианского дня для даты. Если известно это число для двух дат, то интервал времени между ними в днях находится через вычисление разности.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

Прежде чем опубликовать вопрос, попробуйте воспользоваться поиском - возможно тема уже поднималась.

Также рекомендуем Вам зайти в раздел FAQ ,раздел дополняется и, возможно, там вы увидите готовое решение.

Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел

Желаем удачи в Вашем деле!


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | XML, XSL | Следующая тема »


 




[ Время генерации скрипта: 0.0450 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.