Skip to main content
Ben Nadel
On User Experience (UX) Design, JavaScript, ColdFusion, Node.js, Life, and Love.

ColdFusion UDF For Retrieving Surrounding Dates

By Ben Nadel on
Tags: ColdFusion

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 />

Calling it:

	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:

Get Surrounding Dates In ColdFusion

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.

Reader Comments

good on yer, Ben,

the next step is submitting the UDF to 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