// Evol Script // Authors: Gumi, Jesusalva function script now { return gettimetick(2); } // Returns current time. A SQL update superseeded this. // santime( ) function script santime { return gettimetick(2); } function script time_from_ms { return now() + (getarg(0) / 1000); } function script time_from_seconds { return now() + getarg(0); } function script time_from_minutes { return now() + (getarg(0) * 60); } function script time_from_hours { return now() + (getarg(0) * 3600); } function script time_from_days { return now() + (getarg(0) * 86400); } // FuzzyTime({, {, }}) // gives time in a human-readable format // // is bitmasked: // 1 do not show "ago" when in past // 2 do not show "in" when in the future // 4 show "from now" instead of "in" when in the future // // is the number of units to show, // by default uses two (eg. 2m30s or 1h20m). // Use '99' for max precision function script FuzzyTime { .@future = getarg(0, now()); .@options = getarg(1, 3); .@precision = getarg(2, 2); .@diff = (.@future - now()); // check if in the past, or in the future if (.@diff < 0) { .@diff *= -1; .@past = true; } .@diff = max(1, .@diff); if (.@diff >= 31536000) { .@years = (.@diff / 31536000); .@diff = (++.@s == .@precision ? 0 : (.@diff % 31536000)); .@ret$ += sprintf("%d %s", .@years, (.@years > 1 ? "years" : "year")); } if (.@diff >= 86400) { .@days = (.@diff / 86400); .@diff = (++.@s == .@precision ? 0 : (.@diff % 86400)); if (.@s > 1) { .@ret$ += (.@diff > 0 ? ", " : " and "); } .@ret$ += sprintf("%d %s", .@days, (.@days > 1 ? "days" : "day")); } if (.@diff >= 3600) { .@hours = (.@diff / 3600); .@diff = (++.@s == .@precision ? 0 : (.@diff % 3600)); if (.@s > 1) { .@ret$ += (.@diff > 0 ? ", " : (.@s >= 3 ? ", " : " ") + "and "); } .@ret$ += sprintf("%d %s", .@hours, (.@hours > 1 ? "hours" : "hour")); } if (.@diff >= 60) { .@minutes = (.@diff / 60); .@diff = (++.@s == .@precision ? 0 : (.@diff % 60)); if (.@s > 1) { .@ret$ += (.@diff > 0 ? ", " : (.@s >= 3 ? ", " : " ") + "and "); } .@ret$ += sprintf("%d %s", .@minutes, (.@minutes > 1 ? "minutes" : "minute")); } if (.@diff >= 1) { if (++.@s > 1) { .@ret$ += (.@s >= 3 ? ", " : " ") + "and "; } .@ret$ += sprintf("%d %s", .@diff, (.@diff > 1 ? "seconds" : "second")); } if (.@past && !(.@options & 1)) { .@ret$ += " ago"; } if (!(.@past) && !(.@options & 2)) { .@ret$ = ((.@options & 4) ? sprintf("%s from now", .@ret$) : sprintf("in %s", .@ret$)); } return .@ret$; } function script time_stamp { @ts_date$ = sprintf("%04d-%02d-%02d", gettime(7), gettime(6), gettime(5)); @ts_time$ = sprintf("%02d:%02d:%02d", gettime(3), gettime(2), gettime(1)); return (@ts_date$+" "+@ts_time$); } // FIXME function script HumanTime { @time$ = "now"; if(@seconds) set @ms, @ms + (@seconds * 1000); if(@minutes) set @ms, @ms + (@minutes * 60000); if(@days) set @ms, @ms + (@days * 1440000); if(@ms < 1000) goto L_Millis; // under 1 second we have nothing to count @seconds = @ms / 1000; @ms = @ms % 1000; if(@seconds < 60) goto L_Seconds; @minutes = @seconds / 60; @seconds = @seconds % 60; if(@minutes < 60) goto L_Minutes; @hours = @minutes / 60; @minutes = @minutes % 60; if(@hours < 24) goto L_Hours; @days = @hours / 24; @hours = @hours % 24; if(@days) goto L_Days; goto L_Clean; L_Millis: @time$ = @ms + "ms"; return; L_Seconds: @unit$ = "second"; if(@seconds > 1) set @unit$, "seconds"; @unit2$ = "millisecond"; if(@ms > 1) set @unit2$, "milliseconds"; @time$ = @seconds + " " + @unit$; if(@ms) set @time$, @time$ + " and " + @ms + " " + @unit2$; goto L_Clean; L_Minutes: @unit$ = "minute"; if(@minutes > 1) set @unit$, "minutes"; @unit2$ = "second"; if(@seconds > 1) set @unit2$, "seconds"; @unit3$ = "millisecond"; if(@ms > 1) set @unit3$, "milliseconds"; @time$ = @minutes + " " + @unit$; @separator$ = " and "; if(@ms) set @separator$, ", "; if(@seconds) set @time$, @time$ + @separator$ + @seconds + " " + @unit2$; if(@ms) set @time$, @time$ + " and " + @ms + " " + @unit3$; goto L_Clean; L_Hours: @unit$ = "hour"; if(@hours > 1) set @unit$, "hours"; @unit2$ = "minute"; if(@minutes > 1) set @unit2$, "minutes"; @unit3$ = "second"; if(@seconds > 1) set @unit3$, "seconds"; @unit4$ = "millisecond"; if(@ms > 1) set @unit4$, "milliseconds"; @time$ = @hours + " " + @unit$; @separator$ = " and "; if(@seconds || @ms) set @separator$, ", "; if(@minutes) set @time$, @time$ + @separator$ + @minutes + " " + @unit2$; @separator$ = " and "; if(@ms) set @separator$, ", "; if(@seconds) set @time$, @time$ + @separator$ + @seconds + " " + @unit3$; if(@ms) set @time$, @time$ + " and " + @ms + " " + @unit4$; goto L_Clean; L_Days: @unit$ = "day"; if(@hours > 1) set @unit$, "days"; @unit2$ = "hour"; if(@hours > 1) set @unit2$, "hours"; @unit3$ = "minute"; if(@minutes > 1) set @unit3$, "minutes"; @unit4$ = "second"; if(@seconds > 1) set @unit4$, "seconds"; @unit5$ = "millisecond"; if(@ms > 1) set @unit5$, "milliseconds"; @time$ = @days + " " + @unit$; @separator$ = " and "; if(@minutes || @seconds || @ms) set @separator$, ", "; if(@hours) set @time$, @time$ + @separator$ + @hours + " " + @unit2$; @separator$ = " and "; if(@seconds || @ms) set @separator$, ", "; if(@minutes) set @time$, @time$ + @separator$ + @minutes + " " + @unit3$; @separator$ = " and "; if(@ms) set @separator$, ", "; if(@seconds) set @time$, @time$ + @separator$ + @seconds + " " + @unit3$; if(@ms) set @time$, @time$ + " and " + @ms + " " + @unit4$; goto L_Clean; L_Clean: @unit$ = ""; @unit2$ = ""; @unit3$ = ""; @unit4$ = ""; @unit5$ = ""; @seconds = 0; @minutes = 0; @hours = 0; @days = 0; @separator$ = ""; return; }