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

Last change on this file since 474 was 474, checked in by gav, 10 years ago

Scroll month feature to task search calendar.
Add reasoning, asset and sub item columns on procedure tab of task show view.

File size: 4.2 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    * Make a date object from supplied year, month, day values.
102    * The Calendar.getInstance() or Calendar.instance factory returns a new calendar instance, usually
103    * a Gregorian calendar but using Calendar we don't have to worry about those details.
104    * The time fields are set to zero and cal.getTime() or cal.time returns a java.util.Date object.
105    * @param year The year as a string or integer.
106    * @param month The month as a string or integer.
107    * @param day The day as a string or integer.
108    * @returns A Date object having the given date and all time fields set to 0, so the very start of the given day.
109    */
110    public static Date makeDate(year, month, day) {
111        Calendar cal = Calendar.instance
112        cal.clear()
113        // Stupid month is 0-based, grumble.
114        cal.set(year.toInteger(), month.toInteger()-1, day.toInteger())
115        cal.time
116    }
117
118}
Note: See TracBrowser for help on using the repository browser.