Earlier today, Sam suggested that I wrap at least some of my surrounding date algorithms in a ColdFusion user defined function. Here is my UDF, GetSurroundingDates(), that wraps all those dates up in a struct and returns it:
- hint="Returns the start and end dates of all same-year dates relavent to the given date.">
- <!--- Define arguments. --->
- <!--- Set up local scope. --->
- <cfset var LOCAL = StructNew() />
- Start out fixing the passed in date. Fixing it will
- remove the time and result in a date-only values. This
- value will be echoed back in the resultant struct.
- <cfset LOCAL.Date = DateFormat( ARGUMENTS.Date ) />
- <!--- Get the start and end date of the week. --->
- <cfset LOCAL.WeekStart = DateFormat( LOCAL.Date - DayOfWeek( ARGUMENTS.Date ) + 1 ) />
- <cfset LOCAL.WeekEnd = DateFormat( LOCAL.WeekStart + 6 ) />
- <!--- Get the start and end of the month. --->
- <cfset LOCAL.MonthStart = DateFormat( LOCAL.Date - Day( LOCAL.Date ) + 1 ) />
- <cfset LOCAL.MonthEnd = DateFormat( LOCAL.Date + (DaysInMonth( LOCAL.Date ) - Day( LOCAL.Date )) ) />
- <!--- Get the start and end of the calendar month. --->
- <cfset LOCAL.CalendarMonthStart = DateFormat( LOCAL.MonthStart - DayOfWeek( LOCAL.MonthStart ) + 1 ) />
- <cfset LOCAL.CalendarMonthEnd = DateFormat( LOCAL.MonthEnd + (7 - DayOfWeek( LOCAL.MonthEnd )) ) />
- <!--- Get the start and end of the year. --->
- <cfset LOCAL.YearStart = DateFormat( CreateDate( Year( LOCAL.Date ), 1, 1 ) ) />
- <cfset LOCAL.YearEnd = DateFormat( CreateDate( Year( LOCAL.Date ), 12, 31 ) ) />
- <!--- Return the surrounding dates. --->
- <cfreturn LOCAL />
- Get today as the given date. We don't care about
- fixing the date as the ColdFusion UDF will take
- care of that for us.
- <cfset dtToday = Now() />
- <!--- Dump out resultant struct. --->
- var="#GetSurroundingDates( dtToday )#"
- label="Surronding Dates - #DateFormat( dtToday )#"
... we get the following output:
| || || |
| || |
| || || |
I put the DateFormat() calls inside of the GetSurroundingDates() ColdFusion UDF for ease of use, but honestly, these are just overkill to me. I enjoy working with numeric dates so I don't care that dates coming out of it would be numeric (would fail IsDate() method calls). Once you get comfortable with numeric dates, I would recommend stripping out those DateFormat() calls as they do nothing significant but add to processing overhead.
Looking For A New Job?
good on yer, Ben,
the next step is submitting the UDF to cflib.org so it'll spread around the world for evermore (well, that's perhaps going a bit far but you get the idea...)
just a thought
Thank you who writes with that this code! Very helped!