On 10/23/2010 10:45 PM, Eugen Colesnicov wrote:
I checked this example and your script - it is not correct, because you compare separately year, month and day of document with current date - year, month and day-100. But if, for example now is 02 january, your script give uncorrect result, becase I also should change year and month (and year), then I want to get date BEFORE 100 days of 02 january.
Need to make arithmetical operations with dates and these operations should consider also possible transitions of month and year when day changed ... In any case - thanks!
I found the answer - need to use special velocity object $datetool
You can use the jodatime plugin, which makes it easier to work with dates. See https://svn.xwiki.org/svnroot/xwiki/platform/xwiki-plugins/trunk/jodatime/ Accessed with $xwiki.jodatime Also, you shouldn't use computed date segments as constants inside a query, but do a parameterized query and compare dates. Schematic example: $xwiki.searchDocuments(", DateProperty someDateProp where someDateProp.value > ?", [$computedStartDate])
Example: #set ($d = 5) - days interval which I need #set ($ms = $d * 24 * 60 * 60 * 1000) - Calculating internal in Milliseconds
#set ($calendar = $datetool.getCalendar()) #set ($currentTime = $calendar.getTimeInMillis()) #set ($targetTime = $currentTime - $ms) #set ($void = $calendar.setTimeInMillis($targetTime)) #set ($targetDate = $calendar.getTime()) #set ($targetYear = $datetool.getYear($targetDate)) :get year of a date = currentdate - 5 days #set ($targetMonth = $datetool.getMonth($targetDate) + 1) :get month of a date = currentdate - 5 days #set ($targetDay = $datetool.getDay($targetDate)) :get day of a date = currentdate - 5 days
and after this, in a hql searching, I can compare this year, month, and day with documents year, month and day ...
-- Sergiu Dumitriu http://purl.org/net/sergiu/