Ben Nadel
On User Experience (UX) Design, JavaScript, ColdFusion, Node.js, Life, and Love.
Ben Nadel at Scotch On The Rocks (SOTR) 2011 (Edinburgh) with: Cyril Hanquez and Hugo Sombreireiro and Reto Aeberli and Steven Peeters and Guust Nieuwenhuis and Aurélien Deleusière and Damien Bruyndonckx
Ben Nadel at Scotch On The Rocks (SOTR) 2011 (Edinburgh) with: Cyril Hanquez@Fitzchev ) , Hugo Sombreireiro@hsombreireiro ) , Reto Aeberli@aeberli ) , Steven Peeters@aikisteve ) , Guust Nieuwenhuis@Lagaffe ) , Aurélien Deleusière@adeleusiere ) , and Damien Bruyndonckx ( @damienbkx )

Parsing Http Time Strings With ParseDateTime() In ColdFusion

By Ben Nadel on
Tags: ColdFusion

This is a super minor post; but, last week, when I was working on Sticky CDN, I remembered that the parseDateTime() function, in ColdFusion, could parse the date/time strings commonly used in HTTP headers. parseDateTime() won't take the timezone information into account; but, it will parse the date and time portions properly.

To see this in action, I've got a demo that takes my local development time (EST), generates the Http Time String, then parses it (as UTC), and converts it back to local time:

  • <cfscript>
  • /**
  • * I output the date with both date and time portions formatted.
  • *
  • * @output false
  • */
  • public string function outputTime( required date input ) {
  • return(
  • dateFormat( input, "Mmm d, yyyy" ) &
  • " at " &
  • timeFormat( input, "h:mm:ss TT" )
  • );
  • }
  • // ------------------------------------------------------ //
  • // ------------------------------------------------------ //
  • // Get the current time on my local development machine (EST).
  • easternTime = now();
  • // Get the given time, converted to UTC, in a format according to (documentation):
  • // ---
  • // "HTTP standard described in RFC 1123 and its underlying RFC, 822. This format is
  • // commonly used in Internet protocols, including HTTP."
  • httpTime = getHttpTimeString( easternTime );
  • // Now, try to parse it back into a date (UTC).
  • parsedTime = parseDateTime( httpTime );
  • // And, convert the UTC date back to my local development time.
  • localTime = dateConvert( "utc2local", parsedTime );
  • // Output results.
  • writeOutput( "Http Time: #httpTime#<br />" );
  • writeOutput( "- - - -<br />" );
  • writeOutput( "Original Time: #outputTime( easternTime )#<br />" );
  • writeOutput( "Parsed Time: #outputTime( parsedTime )#<br />" );
  • writeOutput( "Local Time: #outputTime( localTime )#<br />" );
  • </cfscript>

When I run the above code, I get the following output:

Http Time: Mon, 04 Aug 2014 11:00:35 GMT
- - - -
Original Time: Aug 4, 2014 at 7:00:35 AM
Parsed Time: Aug 4, 2014 at 11:00:35 AM
Local Time: Aug 4, 2014 at 7:00:35 AM

Again, the parseDateTime() function won't take the timezone into account; so, if I were to replace "GMT" with "EST" before parsing it, nothing would change. But, since the standard seems to be that HTTP headers are all in UTC/GMT time, then you simply need to convert the parsed time to your local time (if so desired).

Reader Comments

This code will work in most versions of ColdFusion. You could shorten the code a bit by using the DateTimeFormat() function in CF10 and CF11.

Reply to this Comment


It's funny you mention that. I actually started off trying to use the dateTimeFormat(). But, I was getting a really odd output. I had a mask that was something link:

"Mmm d, yyyy 'at' h:nn:ss TT"

... but the 'at' kept getting converted to 'p'. Not sure why. Even the examples in the docs use the '' notation to escape portions of the mask. It had me flummoxed - I couldn't figure it out, so just reverted to something more manual.

Reply to this Comment

Post A Comment

You — Get Out Of My Dreams, Get Into My Comments
Live in the Now
Comment Etiquette: Please do not post spam. Please keep the comments on-topic. Please do not post unrelated questions or large chunks of code. And, above all, please be nice to each other - we're trying to have a good conversation here.