ColdFusion Relative Time Script UDF

A few minutes ago a user in the ColdFusion IRC channel asked about an ActionScript relative time script. What is a relative time script? It translates something like "December 10" to "8 days ago". Turns out Google found a bunch of examples here. I took the first example, a JavaScript one, and rewrote it. This version is ColdFusion 8 only since it uses <, but you could change that in about 2 nanoseconds for a cf7 and earlier version. I'll add this up to CFLib a bit later probably.

<cfscript> function relativeTime(pastdate) { var delta = dateDiff("s", pastDate, now());

if(delta < 60) { return "less than a minute ago"; } else if(delta < 120) { return "about a minute ago"; } else if(delta < (4560)) { return round(delta/60) & " minutes ago"; } else if(delta < (9060)) { return "about an hour ago"; } else if(delta < (246060)) { return round(delta/3600) & " hours ago"; } else if(delta < (486060)) { return "1 day ago"; } else { return round(delta/86400) & " days ago"; } } </cfscript>

<cfset pastdate = dateAdd("n", -9400, now())> <cfoutput>Paris had dignity #relativeTime(pastdate)#</cfoutput>

I'll update the wiki too (got to represent the ColdFusion!)

Archived Comments

Comment 1 by Will Swain posted on 12/19/2007 at 10:13 PM

Thanks Ray,

However, I'm concerned that your example is redundant. Not sure Ms Hilton ever had dignity! :)

Comment 2 by ziggy posted on 2/27/2008 at 7:48 AM

This syntax errors in BD7 too. Found out using Project Tracker which incorporated it and couldn't be started.

For the sake of one character, best to change all "<" to "LT" so it works in everything.

Comment 3 by Raymond Camden posted on 2/27/2008 at 7:54 AM

Well, I did clearly point out it was cf8 only because of the <. Folks are welcome to mod it.

Comment 4 by Steve Glachan posted on 6/25/2009 at 5:11 AM

Thanks Ray, I'm now using this in a Twitter RSS feed reader. Mixed in GetTimeZoneInfo() to get our Australian offset hours and it's working great!

Comment 5 by Misty posted on 7/19/2014 at 11:04 PM

Hi ray, Coming back to this post very late,

I am using the UDF from cflib for the timezone: http://cflib.org/udf/getTim...

I have included the weeks also in this:

else if (dateDiff("w", now(), arguments.date)){
offset = dateDiff("w",now(), arguments.date);
interval = offset == 1 ? "week":"weeks";
result = "#offset# #interval# left";

working okay, but week is off 7 days and if the date with which i am comparing is say 9 days, i want this to be appearing as 1 week 2 days, i am missing something, not sure what, can you guide

Comment 6 by Raymond Camden posted on 7/20/2014 at 1:48 AM

I'm not quite sure I get your question here. It sounds like you are saying the week difference is off by 7 days - or by one?

Comment 7 by Misty posted on 7/20/2014 at 11:28 AM

Hi Ray, Here is the Pastebin, It is working as of now, but i have removed the weeks as they were not giving me correct results, so what i am actually trying is:

5 days left or 5 days ago

1 week 3 days left

2 months 10 days left

if for specific month, days are 30 or 31, it should say 1 month.

I hope you can guide me what changes can be made to fix these above things:

http://pastebin.com/PZkxb78E

Comment 8 by Raymond Camden posted on 7/21/2014 at 4:35 AM

I honestly don't know what your doing in that code, but here is a modified version of my code that supports weeks. It is not heavily tested.

https://gist.github.com/cfj...