// 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(<unix timestamp>{, <options>{, <precision>}})
// gives time in a human-readable format
//
// <options> 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
//
// <precision> 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;
}