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

Posted July 7, 2006 at 3:08 PM

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."

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

  • <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

Download Code Snippet ZIP File

Post Comment  |  Ask Ben  |  Other Searches  |  Print Page




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

Reader Comments

There are no comments posted for this web log entry.


Post Comment  |  Ask Ben

Recent Blog Comments
Mar 11, 2010 at 9:14 AM
Making SOAP Web Service Requests With ColdFusion And CFHTTP
Just need to add - we still did have to get the external service to clean up their WSDL and flatten it as per the article I posted before ... read »
Mar 11, 2010 at 9:00 AM
Making SOAP Web Service Requests With ColdFusion And CFHTTP
I finally got to the bottom of my problem - the fact was that the WSDL was full of complex types that Axis didn't like - I should have been able to receive it as a struct but that just didn't work so ... read »
Mar 11, 2010 at 8:55 AM
Making SOAP Web Service Requests With ColdFusion And CFHTTP
@Dmitry, No problem my man. You should be able to just parse the SOAP response into XML and be able to access all the nodes that way. The only thing you have to be careful of is the namespaces whic ... read »
Mar 11, 2010 at 8:49 AM
Making SOAP Web Service Requests With ColdFusion And CFHTTP
cfhttp response is located in it's FileContent property ???? You can't imagine how many times I had to work with cfinvoke and it's complex responses and their weird classes deserialization because I ... read »
Mar 11, 2010 at 8:43 AM
Ask Ben: Building An AJAX, jQuery, And ColdFusion Powered Application
@Nathan, Not saying this is the correct way to do this, but I've handled this in many different ways depending on how "secure" the function needs to be. In a case like yours (users needs to be l ... read »
Mar 11, 2010 at 7:57 AM
FLEX On jQuery: Turning HTML Links Into Standard UI Elements
@Peter, Yeah, that's how I build to - we have AJAX and jQuery where is enhances a given page... but we don't require it to tie the entire application together (it's still very much a request-respon ... read »
Mar 11, 2010 at 5:38 AM
Delaying ColdFusion Session Persistence Until User Logs In
Hmmm, I didn't get any email notification here - I definitely selected all the checkboxes (they're still ticked). ... read »
Mar 11, 2010 at 5:05 AM
Ask Ben: Selecting XML Attributes Given Other XML Attributes
Seems like I'm missing something. If I take this code and put it in a .cfm file and try to run it I get this error: Detail Premature end of file. ErrNumber 0 ExceptionMessage Premature end of f ... read »