Ben Nadel
On User Experience (UX) Design, JavaScript, ColdFusion, Node.js, Life, and Love.
Ben Nadel at the jQuery Conference 2010 (Boston, MA) with: Mike Hostetler
Ben Nadel at the jQuery Conference 2010 (Boston, MA) with: Mike Hostetler@mikehostetler )

How Often Are Numeric Dates Unique In ColdFusion?

By Ben Nadel on
Tags: ColdFusion

As you probably know, ColdFusion can represent date/time values as numeric values. Not only can you get the milliseconds-since-Epoch from the underlying Java data/time object, you can also get the fractional-days since December 30, 1899. When dealing with the latter values - fractional days - I was curious to see what fractional time-delta would result in a unique numeric value.

To test this, I took a static start date and iterated over it 2,001 times, each time adding a millisecond. Then, I multiplied that value by one, which coerced it into a numeric value. Once I had the collection of numeric values, I looped over them to figure out how often they change:

  • <cfscript>
  •  
  • startTime = createDateTime( 2014, 12, 15, 0, 0, 0 );
  •  
  • // I hold the date/time stamps converted to a numeric representation.
  • numericTimes = [];
  •  
  • // Gather the numeric dates, each one MILLISECOND apart from the last.
  • for ( i = 0 ; i <= 2001 ; i++ ) {
  •  
  • arrayAppend(
  • numericTimes,
  • ( dateAdd( "l", i, startTime ) * 1 )
  • );
  •  
  • }
  •  
  •  
  • lastValue = 0;
  •  
  • // Output the numeric values and indicate if two subsequent values match.
  • for ( i = 1 ; i <= arrayLen( numericTimes ) ; i++ ) {
  •  
  • value = numericTimes[ i ];
  •  
  • writeOutput( "+#( i - 1 )# : #value#" );
  •  
  • if ( value == lastValue ) {
  •  
  • writeOutput( " &mdash; same as last" );
  •  
  • }
  •  
  • writeOutput( "<br />" );
  •  
  • lastValue = value;
  •  
  • }
  •  
  • </cfscript>

When I run this code, I get 2,002 lines of output. For the sake of readability, I've removed many of the duplicates:

+0 : 41988
+1 : 41988 -- same as last
+2 : 41988 -- same as last
+3 : 41988 -- same as last
+4 : 41988 -- same as last
+5 : 41988 -- same as last
... removed for readability ...
+998 : 41988 -- same as last
+999 : 41988 -- same as last
+1000 : 41988.0000116
+1001 : 41988.0000116 -- same as last
+1002 : 41988.0000116 -- same as last
+1003 : 41988.0000116 -- same as last
+1004 : 41988.0000116 -- same as last
+1005 : 41988.0000116 -- same as last
... removed for readability ...
+1998 : 41988.0000116 -- same as last
+1999 : 41988.0000116 -- same as last
+2000 : 41988.0000231
+2001 : 41988.0000231 -- same as last

As you can see, while date/time objects have millisecond precision, the numeric representation of fractional days is only unique to the second. This means the the following code is only unique once a second:

  • #( now() * 1 )#

This is good to know since I often use this kind of a value to cache-bust image and CSS (Cascading Stylesheet) source URLs. And again, I'm not saying that ColdFusion date/time objects have second-precision - you can clearly add milliseconds to a date/time object; I'm only looking at ColdFusion's unique fractional-day representation, which is [apparently] precise to the second.




Reader Comments

Post A Comment

You — Get Out Of My Dreams, Get Into My Comments
Live in the Now
Oops!
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.