Difference between revisions of "TimeAgo"

From Second Life Wiki
Jump to navigation Jump to search
m (<lsl> tag to <source>)
 
(6 intermediate revisions by 3 users not shown)
Line 7: Line 7:
|func_footnote=
|func_footnote=
See also: [[llGetUnixTime]]
See also: [[llGetUnixTime]]
|spec=<lsl>
|examples=
//Created by Ugleh Ulrik
<source lang="lsl2">
string TimeAgo(integer tm) {
    integer dif = llGetUnixTime()-tm; //difference in seconds
    if (dif == 0)//Small bug fix if dif is 0
    return "0 seconds";
    list pds = ["second","minute","hour","day","week","month","year","decade"];
    list lngh = [1,60,3600,86400,604800,2630880,31570560,315705600];//the number equivalent to pds
    integer v;integer no;
    for(v = llGetListLength(lngh)-1; (v >= 0)&&(no = dif/llList2Integer(lngh,v)<=1); v--);
string dd = llList2String(pds,v);
integer ntime = dif / llList2Integer(lngh,llListFindList(pds, [dd])); //this will get the correct time in pds, then divide the dif
if(no != 1)dd +="s"; //if integer no is not equal to 1 then it should have an s at the end
dd = (string)ntime + " "+ dd; //This produces the finished output
    return dd;
}
</lsl>
|examples=<lsl>
//Created by Ugleh Ulrik
//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  
default  
{
{
 
     touch_start(integer total_number)
     touch_start(integer total_number)
     {
     {
         integer time = llGetUnixTime() - 180;
         integer now = llGetUnixTime();
         llSay(0,  TimeAgo(time) + " ago");
         integer time = now - 180;
        }
}


        // integer time is the current unix time minus 180 seconds (3 minutes)
        // the outcome will be "3 minutes ago"


//integer time is the current unix time minus 180 seconds (3 minutes)
        llSay(PUBLIC_CHANNEL,  TimeAgo(time));
//The outcome will be "3 minutes ago"</lsl>
    }
}
</source>
|helpers
|helpers
|notes
|notes
Line 45: Line 81:
|also_articles
|also_articles
|cat1=Examples
|cat1=Examples
|cat2
|cat2=User-Defined_Functions
|cat3
|cat3
|cat4
|cat4
}}
}}

Latest revision as of 14:43, 22 January 2015

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

//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));
    }
}