Fuzzy time

Inspired by a couple of posts online I created a ColdFusion tag that will convert time differences into an English phrase. IE, if the originating date is 21 days ago, it will read "three weeks ago". It's a bit fuzzy as it uses broad defintions of how long ago the original date is. I've also submitted to cflib. Enjoy:

 <cffunction name="timeAgo" description="Converts date and time differences into English descriptions">
    <cfargument name="timeThen" required="true">
    <cfargument name="timeNow" required="false" default="#now()#">

    <cfset var secondsSince = DateDiff("S",arguments.timeThen,arguments.timeNow)>
    <cfset var minutesSince = DateDiff("N",arguments.timeThen,arguments.timeNow)>
    <cfset var hoursSince = DateDiff("H",arguments.timeThen,arguments.timeNow)>
    <cfset var daysSince = DateDiff("D",arguments.timeThen,arguments.timeNow)>
    <cfset var monthsSince = DateDiff("M",arguments.timeThen,arguments.timeNow)>
    <cfset var yearsSince = DateDiff("YYYY",arguments.timeThen,arguments.timeNow)>

    <cfif secondsSince lt 60>
        <cfreturn "just now">
    <cfelseif minutesSince lt 2>
        <cfreturn "one minute ago">
    <cfelseif minutesSince lt 60>
        <cfreturn minutesSince & " minutes ago">
    <cfelseif minutesSince lt 120>
        <cfreturn "one hour ago">
    <cfelseif hoursSince lt 24>
        <cfreturn hoursSince & " hours ago">
    <cfelseif daysSince eq 1>
        <cfreturn "yesterday">
    <cfelseif daysSince lt 7>
        <cfreturn daysSince & " days ago">
    <cfelseif daysSince lt 14>
        <cfreturn "last week">
    <cfelseif daysSince lt 21>
        <cfreturn "two weeks ago">
    <cfelseif daysSince lt 28>
        <cfreturn "three weeks ago">
    <cfelseif daysSince lt 60>
        <cfreturn "last month">
    <cfelseif daysSince lt 365>
        <cfreturn monthsSince & " months ago">
    <cfelseif daysSince lt 730>
        <cfreturn "last year">
    <cfelse>
        <cfreturn yearsSince & " years ago">
    </cfif>
</cffunction>


About this entry