source: trunk/grails-app/services/DateUtilService.groovy @ 552

Last change on this file since 552 was 552, checked in by gav, 14 years ago

Get Task Search filterpane associatedPropertyValues in controller instead of in gsp.
Sort and only get active items for associatedPropertyValues.
Small refator of DateUtilService with new plusYear().

File size: 5.6 KB
Line 
1import org.codehaus.groovy.runtime.TimeCategory
2// the above will be deprecated and replaced by: groovy.time.TimeCategory
3/// @todo: consider moving this to org.gnumims.DateUtil
4/// pros: easy to use in domain classes.
5/// cons: have to import so pulls in all referenced imports? Injection probably does that anyway.
6
7/**
8* Provides some convenience methods for working with dates.
9*/
10class DateUtilService {
11
12    boolean transactional = false
13    //static scope = "request"
14
15    /**
16    * Get the start of today.
17     * Can be call as dateUtilService.today or dateUtilService.getToday().
18     * @returns A Date object with today's date and all time fields set to 0.
19    */
20    public static Date getToday() {
21        return getMidnight(new Date())
22    }
23
24    /**
25    * Get the start of tomorrow.
26     * Can be call as dateUtilService.tomorrow or dateUtilService.getTomorrow().
27     * @returns A Date object with tomorrow's date and all time fields set to 0.
28    */
29    public static Date getTomorrow() {
30        return (getToday() + 1) as Date
31    }
32
33    /**
34    * Get the start of yesterday.
35     * Can be call as dateUtilService.yesterday or dateUtilService.getYesterday().
36     * @returns A Date object with yesterday's date and all time fields set to 0.
37    */
38    public static Date getYesterday() {
39        return (getToday() - 1) as Date
40    }
41
42    /**
43    * Get the start of the day one week ago.
44     * Can be call as dateUtilService.oneWeekAgo or dateUtilService.getOneWeekAgo().
45     * @returns A Date object with the date one week ago and all time fields set to 0.
46    */
47    public static Date getOneWeekAgo() {
48        return (getToday() - 7) as Date
49    }
50
51    /**
52    * Get the start of the day one week ago.
53     * Can be call as dateUtilService.oneWeekAgo or dateUtilService.getOneWeekAgo().
54     * @returns A Date object with the date one week ago and all time fields set to 0.
55    */
56    public static Date getOneWeekFromNow() {
57        return (getToday() + 7) as Date
58    }
59
60    /**
61    * Get the start of a given date by setting all time fields to 0.
62    * The Calendar.getInstance() or Calendar.instance factory returns a new calendar instance, usually
63    * a Gregorian calendar but using Calendar we don't have to worry about those details.
64    * The time fields are then set to zero and cal.getTime() or cal.time returns a java.util.Date object.
65    * @param date The Date object to start with.
66    * @returns A Date object having the given date and all time fields set to 0, so the very start of the given day.
67    */
68    public static Date getMidnight(Date date) {
69        Calendar cal = Calendar.instance
70        cal.setTime(date)
71        cal.set(Calendar.HOUR_OF_DAY, 0)
72        cal.set(Calendar.MINUTE, 0)
73        cal.set(Calendar.SECOND, 0)
74        cal.set(Calendar.MILLISECOND, 0)
75        cal.time
76    }
77
78    /**
79    * Get the date one month in the future.
80    * @param date The Date object to start with.
81    * @returns A Date object one month in the future.
82    */
83    public static Date getNextMonth(Date date) {
84        use(TimeCategory) {
85            date + 1.months
86        }
87    }
88
89    /**
90    * Get the date one month ago.
91    * @param date The Date object to start with.
92    * @returns A Date object one month ago.
93    */
94    public static Date getPreviousMonth(Date date) {
95        use(TimeCategory) {
96            date - 1.months
97        }
98    }
99
100    /**
101    * Get the date plus x years.
102    * @param date The Date object to start with, defaults to today.
103    * @param plusYears The number of years to add, defaults to 1.
104    * @returns A Date object adjusted by x years.
105    */
106    public static Date plusYear(Date date = new Date(), Integer plusYears = 1) {
107        use(TimeCategory) {
108            date + plusYears.years
109        }
110    }
111
112    /**
113    * Make a date object from supplied year, month, day values.
114    * The Calendar.getInstance() or Calendar.instance factory returns a new calendar instance, usually
115    * a Gregorian calendar but using Calendar we don't have to worry about those details.
116    * The time fields are set to zero and cal.getTime() or cal.time returns a java.util.Date object.
117    * @param year The year as a string or integer.
118    * @param month The month as a string or integer, defaults to 1 (i.e. January).
119    * @param day The day as a string or integer, defaults to 1.
120    * @returns A Date object having the given date and all time fields set to 0, so the very start of the given day.
121    */
122    public static Date makeDate(year, month=1, day=1) {
123        Calendar cal = Calendar.instance
124        cal.clear()
125        // Stupid month is 0-based, grumble.
126        cal.set(year.toInteger(), month.toInteger()-1, day.toInteger())
127        cal.time
128    }
129
130    /**
131    * Get the day of month from supplied date.
132    * @param date The date to extract the day of month from.
133    * @returns An integer representing the day of the month.
134    */
135    public static Integer getDayFromDate(Date date) {
136        Calendar cal = Calendar.instance
137        cal.setTime(date)
138        cal.get(Calendar.DAY_OF_MONTH)
139    }
140
141    /**
142    * Get the month from supplied date.
143    * @param date The date to extract the month from.
144    * @returns An integer representing the month.
145    */
146    public static Integer getMonthFromDate(Date date) {
147        Calendar cal = Calendar.instance
148        cal.setTime(date)
149        cal.get(Calendar.MONTH) + 1 // Stupid month is 0-based, grumble.
150    }
151
152    /**
153    * Get the year from supplied date.
154    * @param date The date to extract the year from.
155    * @returns An integer representing the year.
156    */
157    public static Integer getYearFromDate(Date date) {
158        Calendar cal = Calendar.instance
159        cal.setTime(date)
160        cal.get(Calendar.YEAR)
161    }
162
163}
Note: See TracBrowser for help on using the repository browser.