Обнаружена ошибка в XPages

Попробуйте этот код:

<xp:text escape="true" id="computedField4">
    <xp:this.value><![CDATA[#{javascript:
        var td= @Adjust(@Date(2015,3,1), 0, 1, 0, 0, 0, 0);
        return @Text(@Year(td))+","+@Text(@Month(td))+","+@Text(@Day(td));
    }]]></xp:this.value>
</xp:text>

Ожидаемый результат: 2015,4,1

Фактический выпуск: 2015,3,29

ОБНОВИТЬ

Это решает проблему, но есть ли более короткая версия:

<xp:text escape="true" id="computedField4">
    <xp:this.value><![CDATA[#{javascript:
        var cal= java.util.Calendar.getInstance();
        cal.add(java.util.Calendar.MONTH, 1);
        var td:Date= cal.getTime();
        return td.getFullYear()+","+(td.getMonth()+1)+","+td.getDate();
    }]]></xp:this.value>
</xp:text>

ТИА.


person D.Bugger    schedule 01.03.2015    source источник
comment
Я рекомендую не сосредотачиваться на более коротком решении. Это хорошо работает. Лучшее в этом то, что вы не используете @formulas.   -  person David Leedy    schedule 01.03.2015


Ответы (2)


Я не могу воспроизвести на 9.0.1 FP2 HF1 в Windows, и @Date(2015,3,1) в вычисляемом поле в британской локали возвращает 1 марта, как и ожидалось. Но это может быть фактором http://xpages.info/XPagesHome.nsf/Entry.xsp?documentId=5655E1203988BEF0852578CB0066A339. Вы будете переходить на летнее время, а также комбинировать местное и UTC. Обновление - лучший метод. Тогда вы используете только объекты Java, поэтому не полагаетесь на внутренние манипуляции. Кроме того, вы имеете дело с объектом Calendar, который имеет как дату, так и время и зависит от локали, а не устанавливает @Date() без времени, затем запускает @Adjust, что делает, а также проходит через начало летнего времени.

person Paul Stephen Withers    schedule 01.03.2015

Я попробовал и обнаружил, что получаю 2015, 4, 1. Какую версию Domino вы используете? Пробовал на 9.0.1FP2 HF384 на Win 64.

person Rob Mason    schedule 01.03.2015
comment
Я могу воспроизвести проблему Buggers и получить 2015,3,29. Я использую 9.0.1 FP3 Win64. Может это региональная проблема? Я использую регион Швеция - person Thomas Adrian; 01.03.2015
comment
Извините, я должен был упомянуть это: Domino 9.0.1 FP2 на Windows/7/64 6.1 - person D.Bugger; 01.03.2015
comment
У меня настроено Великобритания. Странный. При повторном чтении кажется, что внутренне система считает дату 29 февраля, а добавление месяца дает 29 марта. Мне было бы интересно посмотреть, что возвращает @Date(2015,3,1) до того, как он будет скорректирован. Таким образом, мы можем увидеть, является ли это проблемой Date или @Date(), а не проблемой @Adjust(). - person Rob Mason; 01.03.2015
comment
Мое предположение: месяц неправильный. Он каким-то образом считает, что ему нужно количество дней в феврале, добавляет 28 и возвращает 29 число. - person D.Bugger; 02.03.2015
comment
Я считаю, что это проблема региональных настроек, вам нужно указать часовой пояс, я думаю, вы получите правильную дату, если добавите 1 месяц и 1 час. stackoverflow.com/questions/11115961/ - person Fredrik Norling; 02.03.2015
comment
Итак, вы думаете, что 1 марта в 00:00 здесь (TZ+1), то есть 28 февраля в 23:00 по Гринвичу, добавляется один месяц, чтобы прибыть 28 марта в 23:00, что 29 марта в 00:00 здесь... очень даже правдоподобно! Но правильное ли это поведение? Кстати, я сделал это вчера, используя @Today, и получил неправильный ответ. - person D.Bugger; 02.03.2015