mirror of
https://github.com/ankitects/anki.git
synced 2026-01-13 14:03:55 -05:00
Add maxUnit argument to naturalUnit
This commit is contained in:
parent
615bbf95a1
commit
0a3adf02b0
1 changed files with 25 additions and 16 deletions
|
|
@ -7,8 +7,8 @@ export const SECOND = 1.0;
|
|||
export const MINUTE = 60.0 * SECOND;
|
||||
export const HOUR = 60.0 * MINUTE;
|
||||
export const DAY = 24.0 * HOUR;
|
||||
export const MONTH = 30.417 * DAY; // 365/12 ≈ 30.417
|
||||
export const YEAR = 365.0 * DAY;
|
||||
export const MONTH = YEAR / 12;
|
||||
|
||||
export enum TimespanUnit {
|
||||
Seconds,
|
||||
|
|
@ -36,21 +36,25 @@ export function unitName(unit: TimespanUnit): string {
|
|||
}
|
||||
}
|
||||
|
||||
export function naturalUnit(secs: number): TimespanUnit {
|
||||
export function naturalUnit(secs: number, maxUnit: TimespanUnit = TimespanUnit.Years): TimespanUnit {
|
||||
secs = Math.abs(secs);
|
||||
if (secs < MINUTE) {
|
||||
return TimespanUnit.Seconds;
|
||||
} else if (secs < HOUR) {
|
||||
return TimespanUnit.Minutes;
|
||||
} else if (secs < DAY) {
|
||||
return TimespanUnit.Hours;
|
||||
} else if (secs < MONTH) {
|
||||
return TimespanUnit.Days;
|
||||
} else if (secs < YEAR) {
|
||||
return TimespanUnit.Months;
|
||||
} else {
|
||||
return TimespanUnit.Years;
|
||||
const thresholds = [
|
||||
{ unit: TimespanUnit.Years, min: YEAR },
|
||||
{ unit: TimespanUnit.Months, min: MONTH },
|
||||
{ unit: TimespanUnit.Days, min: DAY },
|
||||
{ unit: TimespanUnit.Hours, min: HOUR },
|
||||
{ unit: TimespanUnit.Minutes, min: MINUTE },
|
||||
{ unit: TimespanUnit.Seconds, min: 0 },
|
||||
];
|
||||
for (const { unit, min } of thresholds) {
|
||||
if (unit > maxUnit) {
|
||||
continue;
|
||||
}
|
||||
if (secs >= min) {
|
||||
return unit;
|
||||
}
|
||||
}
|
||||
return TimespanUnit.Seconds;
|
||||
}
|
||||
|
||||
/** Number of seconds in a given unit. */
|
||||
|
|
@ -146,8 +150,13 @@ function i18nFuncForUnit(
|
|||
If precise is true, show to two decimal places, eg
|
||||
eg 70 seconds -> "1.17 minutes"
|
||||
If false, seconds and days are shown without decimals. */
|
||||
export function timeSpan(seconds: number, short = false, precise = true): string {
|
||||
const unit = naturalUnit(seconds);
|
||||
export function timeSpan(
|
||||
seconds: number,
|
||||
short = false,
|
||||
precise = true,
|
||||
maxUnit: TimespanUnit = TimespanUnit.Years,
|
||||
): string {
|
||||
const unit = naturalUnit(seconds, maxUnit);
|
||||
let amount = unitAmount(unit, seconds);
|
||||
if (!precise && unit < TimespanUnit.Months) {
|
||||
amount = Math.round(amount);
|
||||
|
|
|
|||
Loading…
Reference in a new issue