timeAgo

From Second Life Wiki
Revision as of 12:23, 30 September 2012 by Kireji Haiku (talk | contribs) (damn typo)
Jump to navigation Jump to search

Summary

Function: string TimeAgo( integer tm );

Returns a string that will give you the difference in time.

• integer tm Unix Time used for difference

See also: llGetUnixTime

Examples

<lsl> //Created by Ugleh Ulrik

string TimeAgo(integer time) {

   // time difference in seconds
   integer now = llGetUnixTime();
   integer timeDifference = now - time;
   // small bug fix for when timeDifference is 0
   if (timeDifference == 0)
       return "just now";
   list periods = ["second",
       "minute",
       "hour",
       "day",
       "week",
       "month",
       "year",
       "decade"];
   //the number equivalent to periods
   list lenghts = [1,
       60,
       3600,
       86400,
       604800,
       2630880,
       31570560,
       315705600];
   integer v = llGetListLength(lenghts) - 1;
   integer no;
   while((0 <= v) && (no = timeDifference/llList2Integer(lenghts, v) <= 1))
       --v;
   string output = llList2String(periods, v);
   //this will get the correct time in periods, then divide the timeDifference
   integer ntime = timeDifference / llList2Integer(lenghts, llListFindList(periods, [output]));
   //if integer 'no' is not equal to 1 then it should have an s at the end
   if(no != 1)
       output += "s";
   //This produces the finished output
   output = (string)ntime + " "+ output + " ago";
   return output;

}

default {

   touch_start(integer total_number)
   {
       integer now = llGetUnixTime();
       integer time = now - 180;
       // integer time is the current unix time minus 180 seconds (3 minutes)
       // the outcome will be "3 minutes ago"
       llSay(PUBLIC_CHANNEL,  TimeAgo(time));
   }

}

</lsl>