Date Addition Using CreateTimeSpan() Creates A Numeric Date

Posted May 19, 2009 at 8:53 AM

Tags: ColdFusion

This really isn't news; I am just writing this down to try and drill it into my head. I just spend 10 minutes debugging some old Caching code that uses a CacheUntil date/time stamp. When setting the CacheUntil value, I was using the CreateTimeSpan() to create a future date:

(Now() + CreateTimeSpan( 0, 0, 5, 0 ))

The cache never seemed to be expiring. As part of the logic, the caching controller was checking to see if the CacheUntil value was a date since non-date values would denote a non-expiring data store. It was using ColdFusion's IsDate() function to check the CacheUntil value; IsDate() is great, but it ignores numeric date/time representations. As such, the date I created using the CreateTimeSpan() math was being ignored:

 Launch code in new window » Download code as text file »

  • <!--- Get a date that is 10 minutes in the future. --->
  • <cfset objFuture = (Now() + CreateTimeSpan( 0, 0, 10, 0 )) />
  •  
  • IsDate() :: #IsDate( objFuture )#<br />
  • IsNumericDate() :: #IsNumericDate( objFuture )#<br />

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

IsDate() :: NO
IsNumericDate() :: YES

As you can see, the date math produced a value that IsDate() did not recognize but IsNumericDate() did. I ran into this issue almost three years ago, but I still forget to use IsNumericDate() as my default date/time filter. Remember, remember, remember - just start using IsNumericDate()!

Download Code Snippet ZIP File

Post Comment  |  Ask Ben  |  Print Page


You Might Also Be Interested In:



Learning ColdFusion 9 - ColdFusion 9 tutorials, samples, examples, demos

Reader Comments

May 19, 2009 at 10:20 AM // reply »
20 Comments

Why not just use dateadd('n',5'now())? to adjust your date. Then you don't have to worry about numeric dates?


May 19, 2009 at 10:25 AM // reply »
7,486 Comments

@Anthony,

For some reason, I am simply not a huge fan of DateAdd(). It feels unnatural. Plus, if you are dealing with encapsulated logic or packaged products, I think its a good idea to make it as flexible as possible; if you require your calling code to provide standard date/time stamps only, it cuts out a lot of the logic that people will use to create date/time stamps.


May 19, 2009 at 10:47 AM // reply »
8 Comments

I often use the IsDate() for my date validation but your point seems very valuable here and using IsNumericDate() over IsDate() will solve many problems like this I think.


May 19, 2009 at 10:50 AM // reply »
7,486 Comments

@Akbarsait,

I find it solves my problems :)


May 19, 2009 at 11:09 AM // reply »
20 Comments

@Ben, I guess using createtimespan makes more sense if you want to add something like 1 hour and 5 minutes.


May 19, 2009 at 11:10 AM // reply »
7,486 Comments

@Anthony,

Yeah, I really like the way it easily breaks out all the time fields. Very easy to work with.


May 19, 2009 at 10:27 PM // reply »
2 Comments

I've always wondered why some date/times didn't show up as Yes using isDate. This will come in quite handy for me.


May 20, 2009 at 4:07 AM // reply »
20 Comments

your comments to Anthony are insightful; I also would probably have just used dateAdd if I had come across the problem. But I'm not as experienced as you are. I think this is something programmers come across quite often...finding things that aren't new, but that they need to drill into their heads on a regular basis, because for whatever reason, they forget those certain things. Good post. It'll certainly help me remember and drill it into m head. Thanks!


May 20, 2009 at 4:08 AM // reply »
20 Comments

my head. sorry. it's early...


May 20, 2009 at 10:45 PM // reply »
7,486 Comments

@Anna,

Don't get me wrong - there's nothing wrong with DateAdd() at all. It's just that when you use it, you put more responsibility on the calling code to know the limitations of the implementation. Most of the time, its not an issue; but, anytime you are building something that involves non-standard times, it's probably a good idea to use IsNumericDate().


Post Comment  |  Ask Ben

Recent Blog Comments
Mar 12, 2010 at 1:38 AM
Using jQuery's SlideUp() and SlideDown() Methods With Bottom-Positioned Elements
Very nice and useful tutorials for web designers, Thanks for posting. ... read »
Mar 11, 2010 at 11:14 PM
Using The Apple iPod Shuffle Without iTunes
Whoever coded this deserves a pat on the back. I really hated iTunes and this has worked great for me. Thanks! Oh, and thanks for answering the question about file renaming. I was just afraid I woul ... read »
Mar 11, 2010 at 9:29 PM
Tim Cracked The GMail - CFMailPart Puzzle!
I've been wrestling with the CFMAIL tag and CFMAILPARTS for several days now and have found issues with the CF implementation even in CF9! What I have learned so far is: 1. Using only one CFMAILPART ... read »
Mar 11, 2010 at 6:09 PM
Ask Ben: Building An AJAX, jQuery, And ColdFusion Powered Application
@Eric, Neat trick, I was able to get rid of most of the lines of whitespace following your advice. Some whitespace still remains. With a bit of playing around, I found that the remaining whitespa ... read »
Mar 11, 2010 at 4:56 PM
Ask Ben: Building An AJAX, jQuery, And ColdFusion Powered Application
I've struggled with returning JSON from ColdFusion CFCs for a while because I (mysteriously) get lots of white space/new lines that appear before the actual JSON result (check the response in Firebug ... read »
Mar 11, 2010 at 3:24 PM
Ask Ben: Using jQuery To Act On A Click Event Based On The Target Element
@TripeL, Awesome :) Glad it was helpful. ... read »
Mar 11, 2010 at 3:23 PM
Ask Ben: Using jQuery To Act On A Click Event Based On The Target Element
WOW...that's what I'm looking for. The code examples are very helpful. Thanks ... read »
Mar 11, 2010 at 1:20 PM
What Is The Best Time Of Day To Workout?
Well I am glad I stick to mid afternoon / evening work outs. Interesting find! ... read »