parent $time_root object $time var $root child_index 0 var $root owners [$time] var $root fertile 0 var $root inited 1 var $time_root secs_per_min 60 var $time_root secs_per_hour 3600 var $time_root secs_per_day 86400 var $time_root secs_per_week 604800 var $time_root secs_per_year 31536000 var $time_root created_on 0 var $time_root mins_per_hour 60 var $time_root hours_per_day 24 var $time_root days_per_year 365 var $time_root year_begin 0 var $time_root days ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] var $time_root months #[["Jan", ["January", 1, 31]], ["Feb", ["February", 2, 28]], ["Mar", ["March", 3, 31]], ["Apr", ["April", 4, 30]], ["May", ["May", 5, 31]], ["Jun", ["June", 6, 30]], ["Jul", ["July", 7, 31]], ["Aug", ["August", 8, 31]], ["Sep", ["September", 9, 30]], ["Oct", ["October", 10, 31]], ["Nov", ["November", 11, 30]], ["Dec", ["December", 12, 31]]] var $time_root standard 1 var $root owned [$time] var $root manager $time var $root writable [$time] var $root readable ['parameters, 'methods, 'code] var $root dbref 'time method elapsed arg time, [flag]; var str, t, p; // compares args[1] with time() and returns hh:mm elapsed // will eventually make flags do things like 'long etc. For now its // just your own time, rather than time(). flag = [@flag, 'stopwatch][1]; str = ""; switch (flag) { case 'long: return .to_english(time); default: if (time > 356400) p = 3; else p = 2; str = str + pad(tostr(time / 3600), -p, "0"); str = (str + ":") + pad(tostr((time % 3600) / 60), -2, "0"); return str; } . method dhms arg secs, [long]; var ret_str, x; if (long) long = 1; if (secs > 86400) { x = secs / 86400; ret_str = tostr(x) + (long ? " day" + ((x < 2) ? "" | "s") | "d"); } else if (secs > 3600) { x = secs / 3600; ret_str = tostr(x) + (long ? " hr" + ((x < 2) ? "" | "s") | "h"); } else if (secs > 60) { x = secs / 60; ret_str = tostr(x) + (long ? " min" + ((x < 2) ? "" | "s") | "m"); } else { ret_str = tostr(secs) + (long ? " sec" + ((secs < 2) ? "" | "s") | "s"); } return ret_str; . method month_str arg [args]; var month, m, time, option; // args[1] = time (opt); args[2] == 'num, 'long, 'short; if (args && (type(args[1]) != 'integer)) { time = time(); option = [@args, 'long][1]; } else { time = [@args, time()][1]; option = [@args, 'long, 'long][2]; } if (type(time) == 'integer) month = substr(ctime(time), 5, 3); else month = substr(time, 5, 3); // special case: switch (option) { case 'short: return month; case 'num: return tostr(((.months())[month])[2]); default: return ((.months())[month])[1]; } . method year_str arg [time]; var how; // (time, how) time defaults to time(), how defaults to long how = [@time, 'long, 'long][2]; time = [@time, .time()][1]; if (how == 'long) return substr(ctime(time), 21); return substr(ctime(time), 23); . method ldate arg [args]; var time, ctime, how, options, sep, hrs, mins, secs; // takes a bunch of numbers and returns info depending upon what the // symbol is. Time is optional, so is how for that matter. // options are listed to the right of the descriptions. // How: 'long -- Monday, January 10th, 1994 (default) // 'noyear -- 'long without the year. // 'short -- Mon, Jan 10, 94 // 'date -- 01-Dec-95 (ie: DD-MMM-YY) // 'dmy -- 10/01/94 (ie: DD/MM/YY) ['slash | 'dash] // 'mdy -- 01/10/94 (ie: MM/DD/YY) ['slash | 'dash] // 'ymd -- 94/10/01 (ie: YY/MM/DD) ['slash | 'dash] args = [@args, 'long]; if (type(args[1]) != 'integer) { time = time(); how = args[1]; args = delete(args, 1); } else { time = args[1]; how = args[2]; args = sublist(args, 3); } // figure options first options = [@args, 0][1]; sep = "/"; if (options) { switch (options) { case 'dash: sep = "-"; case 'slash: sep = "/"; } } // figure actual time switch (how) { case 'long: return ((((((.day_str(time)) + ", ") + (.month_str(time))) + " ") + (.month_day_str(time, 'num))) + ", ") + (.year_str(time)); case 'noyear: return ((((.day_str(time)) + ", ") + (.month_str(time))) + " ") + (.month_day_str(time, 'num)); case 'short: ctime = ctime(time); return (((pad(ctime, 3) + ",") + pad(substr(ctime, 4), 7)) + ", `") + (.year_str(time, 'short)); case 'date: return ((((.month_day_str(time)) + "-") + (.month_str(time, 'short))) + "-") + (.year_str(time, 'short)); case 'dmy: return ((((.month_day_str(time)) + sep) + (.month_str(time, 'num))) + sep) + (.year_str(time, 'short)); case 'mdy: return ((((.month_str(time, 'num)) + sep) + (.month_day_str(time))) + sep) + (.year_str(time, 'short)); case 'ymd: return ((((.year_str(time, 'short)) + sep) + (.month_str(time, 'num))) + sep) + (.month_day_str(time, 'num)); } . method ltime arg [args]; var time, ctime, how, options, sep1, sep2, ampm, hrs, mins, secs; // takes a bunch of numbers and returns info depending upon what the symbol is // time is optional, so is how for that matter. Uses '12hr '_ampm for default // options are listed after the descriptions. // '24hr -- 24:00 ['a_m_p_m|'ampm|'_ampm|'ap|'no_ampm] // '12hr -- 12:00 ['a_m_p_m|'ampm|'_ampm|'ap|'no_ampm] // '24hr_sec -- 24:00:00 ['a_m_p_m|'ampm|'_ampm|'ap|'no_ampm] // '12hr_sec -- 12:00:00 ['a_m_p_m|'ampm|'_ampm|'ap|'no_ampm] // 'long -- twelve thirty four pm['a_m_p_m|'ampm|'_ampm|'no_ampm] // 'hour -- Twelve o'clock // BTW, incase your wondering, ltime stands for Lynx Time; i'm a bastard 8b args = [@args, '12hr]; if (type(args[1]) != 'integer) { time = time(); how = args[1]; args = delete(args, 1); } else { time = args[1]; how = args[2]; args = sublist(args, 3); } // figure options first options = [@args, '_ampm][1]; sep1 = "/"; sep2 = ":"; ampm = ["", ""]; if (options) { switch (options) { case 'dash: sep1 = "-"; case 'slash: sep1 = "/"; case 'a_m_p_m: ampm = [" a.m.", " p.m."]; case 'ampm: ampm = ["am", "pm"]; case '_ampm: ampm = [" am", " pm"]; case 'ap: ampm = ["a", "p"]; case 'no_ampm: ampm = ["", ""]; } } // figure actual time switch (how) { case '24hr: return substr(.ctime(time), 12, 5); case '24hr_sec: return substr(.ctime(time), 12, 8); case '12hr: time = .hr_min_sec(time); hrs = toint(time[1]); ampm = (hrs < 12) ? ampm[1] | (ampm[2]); hrs = hrs % 12; hrs = (hrs == 0) ? 12 | hrs; return ((tostr(abs(hrs)) + sep2) + (time[2])) + ampm; case '12hr_sec: time = .hr_min_sec(time); hrs = toint(time[1]); ampm = (hrs < 12) ? ampm[1] | (ampm[2]); hrs = hrs % 12; hrs = (hrs == 0) ? 12 | hrs; return ((((tostr(hrs) + sep2) + (time[2])) + sep2) + (time[3])) + ampm; } . method day_str arg [args]; var day, days, d, time, option; if (args && (type(args[1]) != 'integer)) { time = time(); option = [@args, 'long][1]; } else { time = [@args, time()][1]; option = [@args, 'long, 'long][2]; } if (type(time) == 'integer) day = explode(ctime(time))[1]; else day = explode(time)[1]; days = .days(); switch (option) { case 'num: return .month_day_str(); case 'short: return day; default: for d in (days) { if (match_begin(d, day)) return d; } } . method month_day_str arg [time]; time = .ctime([@time, .time()][1]); return strsub(substr(time, 9, 2), " ", "0"); . method hr_min_sec arg [time]; var ctime; ctime = .ctime(@time); return [substr(ctime, 12, 2), substr(ctime, 15, 2), substr(ctime, 18, 2)]; . method time_stamp return ((.ldate('date)) + "/") + ($time.ltime('24hr_sec)); . method to_english arg time, [reftime]; var times, words, x, seconds, ctime, months, month, year, days, out; // most of this was stolen from MOO (und ve are evil) if (time < 1) return "0 seconds"; reftime = reftime || time(); ctime = (type(reftime) == 'integer) ? ctime(reftime) | reftime; words = ["year", "month", "day", "hour", "minute", "second"]; times = []; seconds = [60, 60, 24]; for x in (seconds) { times = [time % x, @times]; time = time / x; } months = 0; month = ((.months())[substr(ctime, 5, 3)])[2]; year = toint(.year_str(reftime)); days = ((.months())[substr(ctime, 5, 3)])[3]; while (time >= (days + ((month == 2) && (((year % 4) == 0) && (!((year % 400) in [100, 200, 300])))))) { time = time - days; months = months + 1; month = month + 1; if (month > 12) { year = year + 1; month = 1; } } times = [months / 12, months % 12, time, @times]; out = []; for x in [1 .. listlen(words)] { if ((times[x]) > 0) out = [@out, ((tostr(times[x]) + " ") + (words[x])) + (((times[x]) == 1) ? "" | "s")]; } return $list.to_english(out); . method date arg [args]; var time, opt; time = [@args, time()][1]; opt = [@args, 'long, 'long][2]; if (type(time) != 'integer) throw(~type, "Time must be submitted as an integer."); switch (opt) { case 'short: return ctime(time); default: return ((.ltime(time)) + ", ") + (.ldate(time)); } .