Don't click here unless you want to be banned.

LSL Wiki : LibraryTimeElapsed

HomePage :: PageIndex :: RecentChanges :: RecentlyCommented :: UserSettings :: You are crawl338.us.archive.org
This function can report the amount of real time passed between subsequent calls
with millisecond precision. If it breaks, you can keep both pieces. -ChromalBrodsky

// string elapsed(string sTime)
// ----------------------------
// Chromal Brodsky - 2005-01-05
//
// elapsed() uses the highest precision clock available in LSL, llGetTimestamp(),
// to implement a timer with greater than one-second precision.
//
// Typical use:
//
//      string sStart = elapsed("");
//      some_function();
//      string sElapsed = elapsed(sStart);
//
// At the end of the above example, sElapsed is in the format of hh:mm:ss.ssssss,
// e.g.: "00:01:10.605000"
//
// On Lusk running at 1000 FPS on sim367.agni.lindenlab.com,
// I sampled the following times for { sTime = elapsed(""); llWhisper(0, elapsed(sTime) );}
//
//      00:00:00.010000     00:00:00.003000     00:00:00.003000     00:00:00.003998
//      00:00:00.002998     00:00:00.003002     00:00:00.012000     00:00:00.004001
//      00:00:00.004000     00:00:00.005001     00:00:00.003000     00:00:00.004999
// YMMV

string elapsed(string sTime)
{
    if (sTime == "" )
    {
        sTime = llGetTimestamp();                          
    }
    else
    {
        string sH;
        string sM;
        string sS;
        
        string sTimeEnd = llGetTimestamp();
        
        integer iHour = (integer)llGetSubString( sTimeEnd, 11, 12 );
        integer iMin =  (integer)llGetSubString( sTimeEnd, 14, 15 );
        float fSec =      (float)llGetSubString( sTimeEnd, 17, 22 );
        
        integer iHour_start =   (integer)llGetSubString( sTime, 11, 12 );
        integer iMin_start =    (integer)llGetSubString( sTime, 14, 15 );
        float fSec_start =        (float)llGetSubString( sTime, 17, 22 );
        
        if (iHour < iHour_start) 
        {
            iHour += 24;
        }
        if (iMin < iMin_start)
        {
            iMin += 60;
        }
        if (fSec < fSec_start)
        {
            fSec += 60.0;
        }

        iHour = iHour - iHour_start;
        iMin = iMin - iMin_start;
        fSec = fSec - fSec_start;

        if (iHour < 10)
        {
            sH = "0";
        }
        if (iMin < 10)
        {
            sM = "0";
        }
        if (fSec < 10.0)
        {
            sS = "0";
        }
                                                    
        sTime = sH + (string)iHour + ":" + sM + (string)iMin + ":" + sS + (string)fSec;        
    }
    
    return sTime;
}


Based off of elapsed and this script. It calculates the difference between two timestamps.
// string timestamp_difference(string sTimeStart, string sTimeEnd)
//
// At the end of the above example, timestamp_difference is in the format of ddddd:hh:mm:ss.ssssss,
// e.g.: "00000:00:01:10.605000"

string timestamp_difference(string sTimeStart, string sTimeEnd)
{
    list daysPerMonth = [ 0, -1,  30, 58, 89, 119, 150, 180,  211, 242, 272, 303, 333 ];
    if (sTimeStart == "" )
        return sTimeEnd;
    if (sTimeEnd == "")
        sTimeEnd = llGetTimestamp();

    integer year    = (integer) llGetSubString(sTimeEnd,  0,  3);
    integer month   = (integer) llGetSubString(sTimeEnd,  5,  6);
    integer iDay    = (year * 365) + ((year - 2878169) / 4)
                        + llList2Integer( daysPerMonth, month )
                        + (integer) llGetSubString(sTimeEnd,  8,  9)
                        + (month>2) * !(year % 4);
    integer iHour = (integer)llGetSubString( sTimeEnd, 11, 12 );
    integer iMin =  (integer)llGetSubString( sTimeEnd, 14, 15 );
    float fSec =      (float)llGetSubString( sTimeEnd, 17, 22 );

    year    = (integer) llGetSubString(sTimeStart,  0,  3);
    month   = (integer) llGetSubString(sTimeStart,  5,  6);
    integer iDay_start  = (year * 365) + ((year - 2878169) / 4)
                            + llList2Integer( daysPerMonth, month )
                            + (integer) llGetSubString(sTimeStart,  8,  9)
                            + (month>2) * !(year % 4);
    integer iHour_start =   (integer)llGetSubString( sTimeStart, 11, 12 );
    integer iMin_start  =   (integer)llGetSubString( sTimeStart, 14, 15 );
    float fSec_start    =   (float)llGetSubString( sTimeStart, 17, 22 );
    while (fSec < fSec_start)
    {
        fSec += 60.0;
        --iMin;
    }
    while (iMin < iMin_start)
    {
        iMin += 60;
        --iHour;
    }
    while (iHour < iHour_start)
    {
        iHour += 24;
        --iDay;
    }
    iHour = iHour - iHour_start;
    iMin = iMin - iMin_start;
    fSec = fSec - fSec_start;
    string sH = ":";
    string sM = sH;
    string sS = sH;
    string sD;
    if (iHour < 10)
        sH = ":0";
    if (iMin < 10)
        sM = ":0";
    if (fSec < 10.0)
        sS = ":0";
    sD=(string)iHour;
    return llGetSubString("00000",llStringLength(sD),5) + sD + sH + (string)iHour + sM + (string)iMin + sS + (string)fSec;
}



ScriptLibrary Jasa SEO Jasa SEO Murah Sepatu Online Toko Sepatu Online Sepatu Sepatu Murah Sepatu Safety Sepatu Futsal Cheapes Hostgator Coupon Link Booking Televisori offerte Notebook Offerte Berita Terkini Internet Marketer Muda Internet Marketer Indonesia Portatile Apple RDAnet Lorks Karikatur Bisnis Modal Kecil Bisnis UKM Berita Terbaru Iklan Baris Jasa SEO Jasa SEO Murah SEO Indonesia Konsultan SEO SEO Belajar SEO Kursus SEO Kursus SEO Murah Jam Tangan Casio Jam Tangan Casio Jam Tangan Murah Jam Tangan Grosir Baju Terbaru Grosir Baju Baju Terbaru Grosir Baju Murah Bisnis Online Belajar SEO Kerupuk Kerupuk kulit Social Bookmark Dofollow Social Bookmark Kumpulan Puisi Kirim Puisi bola hantu Penumbuh Rambut Penumbuh Rambut timbangan WBC Wonogiri Jasa SEO Murah Jasa SEO Jam Tangan Murah
There is no comment on this page. [Display comments/form]