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

Quick Note On IsDate() vs. IsNumericDate()

By Ben Nadel on
Tags: ColdFusion

After my post yesterday on date math, someone sent me a question about IsDate() vs. IsNumericDate(). I briefly touch on the use of IsNumericDate() to determine if you have a numeric date, but I was not clear on exactly how it works. IsDate() takes a date/time object. IsNumericDate() takes a number. There are some caveats here. Since IsNumericDate() requires a number, if you send it a date/time object, ColdFusion will automatically convert the date/time object to a number, therefore allowing it to work. IsDate(), on the other hand, takes a date/time object and will NOT be true if passed a number, even if that number represents a date.

Take a look at this example:

<!--- Get date/time object. --->
<cfset dtNow = Now() />

<!--- Get NUMERIC date value. --->
<cfset flNow = (dtNow * 1) />

<!--- Output the date and test methods. --->
#DateFormat( dtNow )# - #IsDate( dtNow )# - #IsNumericDate( dtNow )#

<!--- Output the numeric date and test methods. --->
#DateFormat( flNow )# - #IsDate( flNow )# - #IsNumericDate( flNow )#

In that second line, just notice that I am multiplying the date by 1. This forces ColdFusion to convert the date/time object to a number. The code produces this output:

30-Aug-06 - YES - YES

30-Aug-06 - NO - YES

As you can see, a standard date/time object will return true for BOTH IsDate() and IsNumericDate(). A numeric date will return true for IsNumericDate(), but FALSE for IsDate(). Sorry if I was unclear about this before. As a safe guard, if you are working on a page where you might be working with numeric dates, I would recommend always using IsNumericDate() as it will give you the most useful responses.

Reader Comments


isDate() will work with a string - but, it won't work with a string that represents a number... is what I think they are saying. So, for example, this will return false:

isDate( "123" )

... but this will return true:

isDate( "jun 1, 2010" )

... both of which are strings. Of course, I might be misunderstanding what the docs are saying.

I'm running into a situation where isDate is returning true when being run against decimal numbers. Should 34.5 really equal 12/31/2013?

Sorry, comments have been temporarily disabled due to spam. I'm busy implementing a new moderation feature because... some people are terrible!