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

Last change on this file since 552 was 552, checked in by gav, 9 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.