utils: format_duration_human: calculate years too

Add years and skip showing minute scale once we got over a year,
that's just not relevant anymore at that scale..

Months are just not an ideal thing to show, as they have different
lengths too (leap years have similar issue, but they differ 0.27%
from a normal year, while shortest to longest month is 10.7%
difference!)

Weeks could be done though, they're fixed at 7 days, but for now I
want to avoid unwieldy day numbers like 2634 d as that's just hard to
frame correctly. Also adding years now does not makes adding weeks in
the future impossible anyway..

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
Thomas Lamprecht 2021-11-23 09:34:41 +01:00
parent 6c8df606b1
commit 3ccdce4055

View File

@ -155,7 +155,7 @@ utilities: {
// somewhat like a human would tell durations, omit zero values and do not
// give seconds precision if we talk days already
format_duration_human: function(ut) {
let seconds = 0, minutes = 0, hours = 0, days = 0;
let seconds = 0, minutes = 0, hours = 0, days = 0, years = 0;
if (ut <= 0.1) {
return '<0.1s';
@ -171,7 +171,11 @@ utilities: {
hours = remaining % 24;
remaining = Math.trunc(remaining / 24);
if (remaining > 0) {
days = remaining;
days = remaining % 365;
remaining = Math.trunc(remaining / 365); // yea, just lets ignore leap years...
if (remaining > 0) {
years = remaining;
}
}
}
}
@ -182,11 +186,14 @@ utilities: {
return t > 0;
};
let addMinutes = !add(years, 'y');
let addSeconds = !add(days, 'd');
add(hours, 'h');
add(minutes, 'm');
if (addSeconds) {
add(seconds, 's');
if (addMinutes) {
add(minutes, 'm');
if (addSeconds) {
add(seconds, 's');
}
}
return res.join(' ');
},