# Creating Random Dates in ColdFusion: RandDateRange( dtFrom, dtTo )

Posted July 7, 2006 at 3:08 PM by Ben Nadel

Tags: ColdFusion

Someone was just asking me how to create a random date in ColdFusion. More specifically, how to create a random date between two dates. The solutions for this is quite simple once you understand it. I have created a method named RandDateRange(). This method functions similar to RandRange( intFrom, intTo ) and actually uses that method under the hood. If you abstract generating a random date between two given dates, it comes down to picking a random point in time. We can create this random point by adding a random time span to the "From Date", making sure, of course, that this random time span does not give us a date past the desired "To Date".

The beauty of time spans in ColdFusion is that they can be represented as a single floating point number. This puts us in the perfect position to use RandRange() to create random time spans. To make sure that we do not create too large a timespan, our bottom range parameter will be zero and our top range parameter will be the difference in seconds between the two out lier dates. Therefore, if we get a random second value and add it to the "From Date", we know we can never go past the "To Date."

• <cffunction name="RandDateRange" access="public" returntype="date" output="false"
• hint="This returns a random date between the two given dates (inclusive).">

• <!--- Define arguments. --->
• <cfargument name="FromDate" type="date" required="true" />
• <cfargument name="ToDate" type="date" required="true" />

• <cfscript>

• // Define the local scope.
• var LOCAL = StructNew();

• // Get the difference in seconds between the two dates.
• LOCAL.TimeDifference = DateDiff(
• "s",
• ARGUMENTS.FromDate,
• ARGUMENTS.ToDate
• );

• // Create a random time increment based on the second difference.
• // The time span object is a representation of time-length in
• // terms of a single floating-point number.
• LOCAL.TimeIncrement = CreateTimeSpan(
• 0, // Days
• 0, // Hours
• 0, // Minutes
• RandRange( // Seconds
• // Our smallest possible time increment.
• 0,

• // Our largest possible time increment that will not
• // put us past the ToDate.
• LOCAL.TimeDifference
• )
• );

• // Get a new random date based on the FromDate and the random
• // time span.
• LOCAL.RandomDate = (ARGUMENTS.FromDate + LOCAL.TimeIncrement);

• // This random date now is formatted like a TimeSpan object,
• // meaning that it is in the form of one floating point number.
• return( LOCAL.RandomDate );

• </cfscript>
• </cffunction>

Now to test it out. For the from and to dates, let's pick Now and one month from Now.

From: 2006-07-07
To: 2006-08-07

Now, get a random date between those to:

Random: 38931.4080093

As you can see above, the random date is in Time Span format (represented as a single floating point number). In order to fix that, all we have to do is run a date format on it. Now, keep in mind that ColdFusion still treats that as a valid date. You only need to change the formatting on it for display. You can add, diff, subtract all you want on the server side and its all good.

Formatted: 2006-08-02

### Looking For a New Job?

25% of job board revenue is donated to Kiva. Loans that change lives - Find out more »

Jan 8, 2014 at 4:59 AM // reply »

Nice!

Thanks for this, nice, tightly coded function that worked straight off the page. Integrated into a site in five minutes. You sire, are a champ.

Thanks
Shaun

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.

 Author Name: Author Email: Author Website: Comment: Supported HTML tags for formatting: bold   italic   code Remember my information Subscribe to comments Send me a copy of this comment
InVision App - Prototyping Made Beautiful With Prototyping Tools Recent Blog Comments
Mar 11, 2014 at 6:20 PM
Reading In File Data One Line At A Time Using ColdFusion's CFLoop Tag Or Java's LineNumberReader
Thanks Ben for you very interesting articles on handling large files. As I am not a programmer, I am quite insecure whether my issue is directly related to your description or not. My problem is, tha ... read »
Mar 11, 2014 at 12:21 PM
Compound Transclusion Prevented In AngularJS 1.2
Yeah this hit our team too and locked us as 1.1.5. It seemed like an irresponsible unilateral decision, but our graver concern is the future decisions the Angular team will make with other fundamenta ... read »
Mar 11, 2014 at 2:00 AM
ColdFusion, jQuery, And "AJAX" File Upload Demo
Mar 10, 2014 at 8:24 PM
Nested Views, Routing, And Deep Linking With AngularJS
@Steven, the action property is not something from AngularJS but rather part of the concept that Ben is describing in his blogpost here. it is a custom added property, which is read by the requestCo ... read »
Mar 10, 2014 at 2:03 PM
Nested Views, Routing, And Deep Linking With AngularJS
Where is the angular documentation for 'action:' it is not here: http://docs.angularjs.org/api/ngRoute/provider/ \$routeProvider Thanks. ... read »
Mar 10, 2014 at 12:06 PM
Using Track-By With ngRepeat In AngularJS 1.2
I was hoping that this will work with pagination using ng-repeat. My use case scenario is that I have an images object. images[0] = [im1,im2,im3] // First Page images[1] = [im4, im5, im6] // Second ... read »
Mar 9, 2014 at 6:11 PM
For Better Security Use HtmlEditFormat() In Conjunction With JSStringFormat() In ColdFusion
It looks like htmleditformat() will be deprecated in CF 11 https://wikidocs.adobe.com/wiki/display/coldfusionen/New +in+ColdFusion ... read »
Mar 9, 2014 at 10:55 AM
\$.stop() vs. \$.finish() In jQuery Animations
Nice feature! Thanks for sharing. :) Good for when you are making a 100% AJAX controlled site. ... read »