57 lines
1.2 KiB
TypeScript
57 lines
1.2 KiB
TypeScript
import { Pipe, PipeTransform } from '@angular/core';
|
|
|
|
@Pipe({
|
|
name: 'convertMoreExact'
|
|
})
|
|
export class ConvertMoreExactPipe implements PipeTransform {
|
|
|
|
/**
|
|
* Convert milliseconds to rounded time e.g. ~84d
|
|
* @param timeMs time in milliseconds
|
|
*/
|
|
transform(timeMs: number): string {
|
|
let x = timeMs / 1000;
|
|
|
|
const seconds = Math.floor(x % 60);
|
|
x /= 60;
|
|
|
|
let minutes = 0;
|
|
if (x > 1) { minutes = Math.floor(x % 60); }
|
|
x /= 60;
|
|
|
|
let hours = 0;
|
|
if (x > 1) { hours = Math.floor(x % 24); }
|
|
// TODO Enable/disable day
|
|
x /= 24;
|
|
const days = Math.floor(x);
|
|
|
|
// Final string
|
|
let ret = '~';
|
|
if (days > 0) {
|
|
return '~' + (days + (hours > 12 ? 1 : 0)) + 'd';
|
|
}
|
|
if (hours > 0) {
|
|
if (minutes > 45) {
|
|
ret += (hours + 1) + 'h';
|
|
} else if (minutes < 15) {
|
|
ret += hours + 'h';
|
|
} else {
|
|
ret += hours + 'h 1/2';
|
|
}
|
|
return ret;
|
|
}
|
|
if (minutes > 0) {
|
|
ret += (minutes + (seconds > 35 ? 1 : 0)) + 'min';
|
|
return ret;
|
|
}
|
|
if (seconds > 0) {
|
|
if (seconds > 35) {
|
|
return '~1min';
|
|
} else {
|
|
return seconds + 's';
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|