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'; } } } }