time-util: don't use plural units indiscriminately
format_timestamp_relative currently returns the plural form of years and months no matter the quantity, and in many cases (for durations > 1 week) this is the same with days. This patch changes this so that the function takes the quantity into account, returning "1 month 1 week ago" instead of "1 months 1 weeks ago".
This commit is contained in:
committed by
Anders Wenhaug
parent
df8fd03a7d
commit
45eb4d2261
+30
-12
@@ -429,18 +429,36 @@ char *format_timestamp_relative(char *buf, size_t l, usec_t t) {
|
||||
s = "left";
|
||||
}
|
||||
|
||||
if (d >= USEC_PER_YEAR)
|
||||
snprintf(buf, l, USEC_FMT " years " USEC_FMT " months %s",
|
||||
d / USEC_PER_YEAR,
|
||||
(d % USEC_PER_YEAR) / USEC_PER_MONTH, s);
|
||||
else if (d >= USEC_PER_MONTH)
|
||||
snprintf(buf, l, USEC_FMT " months " USEC_FMT " days %s",
|
||||
d / USEC_PER_MONTH,
|
||||
(d % USEC_PER_MONTH) / USEC_PER_DAY, s);
|
||||
else if (d >= USEC_PER_WEEK)
|
||||
snprintf(buf, l, USEC_FMT " weeks " USEC_FMT " days %s",
|
||||
d / USEC_PER_WEEK,
|
||||
(d % USEC_PER_WEEK) / USEC_PER_DAY, s);
|
||||
if (d >= USEC_PER_YEAR) {
|
||||
usec_t years = d / USEC_PER_YEAR;
|
||||
usec_t months = (d % USEC_PER_YEAR) / USEC_PER_MONTH;
|
||||
snprintf(buf, l, USEC_FMT " %s " USEC_FMT " %s %s",
|
||||
years,
|
||||
years == 1 ? "year" : "years",
|
||||
months,
|
||||
months == 1 ? "month" : "months",
|
||||
s);
|
||||
}
|
||||
else if (d >= USEC_PER_MONTH) {
|
||||
usec_t months = d / USEC_PER_MONTH;
|
||||
usec_t days = (d % USEC_PER_MONTH) / USEC_PER_DAY;
|
||||
snprintf(buf, l, USEC_FMT " %s " USEC_FMT " %s %s",
|
||||
months,
|
||||
months == 1 ? "month" : "months",
|
||||
days,
|
||||
days == 1 ? "day" : "days",
|
||||
s);
|
||||
}
|
||||
else if (d >= USEC_PER_WEEK) {
|
||||
usec_t weeks = d / USEC_PER_WEEK;
|
||||
usec_t days = (d % USEC_PER_WEEK) / USEC_PER_DAY;
|
||||
snprintf(buf, l, USEC_FMT " %s " USEC_FMT " %s %s",
|
||||
weeks,
|
||||
weeks == 1 ? "week" : "weeks",
|
||||
days,
|
||||
days == 1 ? "day" : "days",
|
||||
s);
|
||||
}
|
||||
else if (d >= 2*USEC_PER_DAY)
|
||||
snprintf(buf, l, USEC_FMT " days %s", d / USEC_PER_DAY, s);
|
||||
else if (d >= 25*USEC_PER_HOUR)
|
||||
|
||||
Reference in New Issue
Block a user