Increase precision of some formatted durations
This commit is contained in:
parent
78e86c7c55
commit
387a38a1c8
@ -14,7 +14,7 @@
|
|||||||
<a [routerLink]="['/block' | relativeUrl, diffChange.height]">{{ diffChange.height }}</a>
|
<a [routerLink]="['/block' | relativeUrl, diffChange.height]">{{ diffChange.height }}</a>
|
||||||
</td>
|
</td>
|
||||||
<td class="date text-left">
|
<td class="date text-left">
|
||||||
<app-time kind="since" [time]="diffChange.timestamp" [fastRender]="true"></app-time>
|
<app-time kind="since" [time]="diffChange.timestamp" [fastRender]="true" [precision]="1"></app-time>
|
||||||
</td>
|
</td>
|
||||||
<td class="text-right">{{ diffChange.difficultyShorten }}</td>
|
<td class="text-right">{{ diffChange.difficultyShorten }}</td>
|
||||||
<td class="text-right" [style]="diffChange.change >= 0 ? 'color: #42B747' : 'color: #B74242'">
|
<td class="text-right" [style]="diffChange.change >= 0 ? 'color: #42B747' : 'color: #B74242'">
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
<ng-template #blocksPlural let-i i18n="shared.blocks">{{ i }} <span class="shared-block">blocks</span></ng-template>
|
<ng-template #blocksPlural let-i i18n="shared.blocks">{{ i }} <span class="shared-block">blocks</span></ng-template>
|
||||||
<ng-template #blocksSingular let-i i18n="shared.block">{{ i }} <span class="shared-block">block</span></ng-template>
|
<ng-template #blocksSingular let-i i18n="shared.block">{{ i }} <span class="shared-block">block</span></ng-template>
|
||||||
</div>
|
</div>
|
||||||
<div class="symbol"><app-time kind="until" [time]="epochData.estimatedRetargetDate" [fastRender]="true"></app-time></div>
|
<div class="symbol"><app-time kind="until" [time]="epochData.estimatedRetargetDate" [fastRender]="true" [precision]="1"></app-time></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="item">
|
<div class="item">
|
||||||
<h5 class="card-title" i18n="difficulty-box.estimate">Estimate</h5>
|
<h5 class="card-title" i18n="difficulty-box.estimate">Estimate</h5>
|
||||||
@ -54,7 +54,7 @@
|
|||||||
<ng-template #blocksPlural let-i i18n="shared.blocks">{{ i }} <span class="shared-block">blocks</span></ng-template>
|
<ng-template #blocksPlural let-i i18n="shared.blocks">{{ i }} <span class="shared-block">blocks</span></ng-template>
|
||||||
<ng-template #blocksSingular let-i i18n="shared.block">{{ i }} <span class="shared-block">block</span></ng-template>
|
<ng-template #blocksSingular let-i i18n="shared.block">{{ i }} <span class="shared-block">block</span></ng-template>
|
||||||
</div>
|
</div>
|
||||||
<div class="symbol"><app-time kind="until" [time]="epochData.timeUntilHalving" [fastRender]="true"></app-time></div>
|
<div class="symbol"><app-time kind="until" [time]="epochData.timeUntilHalving" [fastRender]="true" [precision]="1"></app-time></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -68,7 +68,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="item">
|
<div class="item">
|
||||||
<div class="card-text"><app-time kind="until" [time]="epochData.estimatedRetargetDate" [fastRender]="true"></app-time></div>
|
<div class="card-text"><app-time kind="until" [time]="epochData.estimatedRetargetDate" [fastRender]="true" [precision]="1"></app-time></div>
|
||||||
<div class="symbol">
|
<div class="symbol">
|
||||||
{{ epochData.retargetDateString }}
|
{{ epochData.retargetDateString }}
|
||||||
</div>
|
</div>
|
||||||
|
@ -10,6 +10,7 @@ import { dates } from '../../shared/i18n/dates';
|
|||||||
export class TimeComponent implements OnInit, OnChanges, OnDestroy {
|
export class TimeComponent implements OnInit, OnChanges, OnDestroy {
|
||||||
interval: number;
|
interval: number;
|
||||||
text: string;
|
text: string;
|
||||||
|
units: string[] = ['year', 'month', 'week', 'day', 'hour', 'minute', 'second'];
|
||||||
intervals = {};
|
intervals = {};
|
||||||
|
|
||||||
@Input() time: number;
|
@Input() time: number;
|
||||||
@ -18,6 +19,7 @@ export class TimeComponent implements OnInit, OnChanges, OnDestroy {
|
|||||||
@Input() fastRender = false;
|
@Input() fastRender = false;
|
||||||
@Input() fixedRender = false;
|
@Input() fixedRender = false;
|
||||||
@Input() relative = false;
|
@Input() relative = false;
|
||||||
|
@Input() precision: number = 0;
|
||||||
@Input() fractionDigits: number = 0;
|
@Input() fractionDigits: number = 0;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
@ -82,19 +84,20 @@ export class TimeComponent implements OnInit, OnChanges, OnDestroy {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let counter: number;
|
let counter: number;
|
||||||
for (const i in this.intervals) {
|
for (const [index, unit] of this.units.entries()) {
|
||||||
counter = Math.floor(seconds / this.intervals[i]);
|
const precisionUnit = this.units[Math.min(this.units.length - 1), index + this.precision];
|
||||||
|
counter = Math.floor(seconds / this.intervals[unit]);
|
||||||
if (counter > 0) {
|
if (counter > 0) {
|
||||||
let rounded = Math.round(seconds / this.intervals[i]);
|
let rounded = Math.round(seconds / this.intervals[precisionUnit]);
|
||||||
if (this.fractionDigits) {
|
if (this.fractionDigits) {
|
||||||
const roundFactor = Math.pow(10,this.fractionDigits);
|
const roundFactor = Math.pow(10,this.fractionDigits);
|
||||||
rounded = Math.round((seconds / this.intervals[i]) * roundFactor) / roundFactor;
|
rounded = Math.round((seconds / this.intervals[precisionUnit]) * roundFactor) / roundFactor;
|
||||||
}
|
}
|
||||||
const dateStrings = dates(rounded);
|
const dateStrings = dates(rounded);
|
||||||
switch (this.kind) {
|
switch (this.kind) {
|
||||||
case 'since':
|
case 'since':
|
||||||
if (rounded === 1) {
|
if (rounded === 1) {
|
||||||
switch (i) { // singular (1 day)
|
switch (precisionUnit) { // singular (1 day)
|
||||||
case 'year': return $localize`:@@time-since:${dateStrings.i18nYear}:DATE: ago`; break;
|
case 'year': return $localize`:@@time-since:${dateStrings.i18nYear}:DATE: ago`; break;
|
||||||
case 'month': return $localize`:@@time-since:${dateStrings.i18nMonth}:DATE: ago`; break;
|
case 'month': return $localize`:@@time-since:${dateStrings.i18nMonth}:DATE: ago`; break;
|
||||||
case 'week': return $localize`:@@time-since:${dateStrings.i18nWeek}:DATE: ago`; break;
|
case 'week': return $localize`:@@time-since:${dateStrings.i18nWeek}:DATE: ago`; break;
|
||||||
@ -104,7 +107,7 @@ export class TimeComponent implements OnInit, OnChanges, OnDestroy {
|
|||||||
case 'second': return $localize`:@@time-since:${dateStrings.i18nSecond}:DATE: ago`; break;
|
case 'second': return $localize`:@@time-since:${dateStrings.i18nSecond}:DATE: ago`; break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
switch (i) { // plural (2 days)
|
switch (precisionUnit) { // plural (2 days)
|
||||||
case 'year': return $localize`:@@time-since:${dateStrings.i18nYears}:DATE: ago`; break;
|
case 'year': return $localize`:@@time-since:${dateStrings.i18nYears}:DATE: ago`; break;
|
||||||
case 'month': return $localize`:@@time-since:${dateStrings.i18nMonths}:DATE: ago`; break;
|
case 'month': return $localize`:@@time-since:${dateStrings.i18nMonths}:DATE: ago`; break;
|
||||||
case 'week': return $localize`:@@time-since:${dateStrings.i18nWeeks}:DATE: ago`; break;
|
case 'week': return $localize`:@@time-since:${dateStrings.i18nWeeks}:DATE: ago`; break;
|
||||||
@ -117,7 +120,7 @@ export class TimeComponent implements OnInit, OnChanges, OnDestroy {
|
|||||||
break;
|
break;
|
||||||
case 'until':
|
case 'until':
|
||||||
if (rounded === 1) {
|
if (rounded === 1) {
|
||||||
switch (i) { // singular (In ~1 day)
|
switch (precisionUnit) { // singular (In ~1 day)
|
||||||
case 'year': return $localize`:@@time-until:In ~${dateStrings.i18nYear}:DATE:`; break;
|
case 'year': return $localize`:@@time-until:In ~${dateStrings.i18nYear}:DATE:`; break;
|
||||||
case 'month': return $localize`:@@time-until:In ~${dateStrings.i18nMonth}:DATE:`; break;
|
case 'month': return $localize`:@@time-until:In ~${dateStrings.i18nMonth}:DATE:`; break;
|
||||||
case 'week': return $localize`:@@time-until:In ~${dateStrings.i18nWeek}:DATE:`; break;
|
case 'week': return $localize`:@@time-until:In ~${dateStrings.i18nWeek}:DATE:`; break;
|
||||||
@ -127,7 +130,7 @@ export class TimeComponent implements OnInit, OnChanges, OnDestroy {
|
|||||||
case 'second': return $localize`:@@time-until:In ~${dateStrings.i18nSecond}:DATE:`;
|
case 'second': return $localize`:@@time-until:In ~${dateStrings.i18nSecond}:DATE:`;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
switch (i) { // plural (In ~2 days)
|
switch (precisionUnit) { // plural (In ~2 days)
|
||||||
case 'year': return $localize`:@@time-until:In ~${dateStrings.i18nYears}:DATE:`; break;
|
case 'year': return $localize`:@@time-until:In ~${dateStrings.i18nYears}:DATE:`; break;
|
||||||
case 'month': return $localize`:@@time-until:In ~${dateStrings.i18nMonths}:DATE:`; break;
|
case 'month': return $localize`:@@time-until:In ~${dateStrings.i18nMonths}:DATE:`; break;
|
||||||
case 'week': return $localize`:@@time-until:In ~${dateStrings.i18nWeeks}:DATE:`; break;
|
case 'week': return $localize`:@@time-until:In ~${dateStrings.i18nWeeks}:DATE:`; break;
|
||||||
@ -140,7 +143,7 @@ export class TimeComponent implements OnInit, OnChanges, OnDestroy {
|
|||||||
break;
|
break;
|
||||||
case 'span':
|
case 'span':
|
||||||
if (rounded === 1) {
|
if (rounded === 1) {
|
||||||
switch (i) { // singular (1 day)
|
switch (precisionUnit) { // singular (1 day)
|
||||||
case 'year': return $localize`:@@time-span:After ${dateStrings.i18nYear}:DATE:`; break;
|
case 'year': return $localize`:@@time-span:After ${dateStrings.i18nYear}:DATE:`; break;
|
||||||
case 'month': return $localize`:@@time-span:After ${dateStrings.i18nMonth}:DATE:`; break;
|
case 'month': return $localize`:@@time-span:After ${dateStrings.i18nMonth}:DATE:`; break;
|
||||||
case 'week': return $localize`:@@time-span:After ${dateStrings.i18nWeek}:DATE:`; break;
|
case 'week': return $localize`:@@time-span:After ${dateStrings.i18nWeek}:DATE:`; break;
|
||||||
@ -150,7 +153,7 @@ export class TimeComponent implements OnInit, OnChanges, OnDestroy {
|
|||||||
case 'second': return $localize`:@@time-span:After ${dateStrings.i18nSecond}:DATE:`; break;
|
case 'second': return $localize`:@@time-span:After ${dateStrings.i18nSecond}:DATE:`; break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
switch (i) { // plural (2 days)
|
switch (precisionUnit) { // plural (2 days)
|
||||||
case 'year': return $localize`:@@time-span:After ${dateStrings.i18nYears}:DATE:`; break;
|
case 'year': return $localize`:@@time-span:After ${dateStrings.i18nYears}:DATE:`; break;
|
||||||
case 'month': return $localize`:@@time-span:After ${dateStrings.i18nMonths}:DATE:`; break;
|
case 'month': return $localize`:@@time-span:After ${dateStrings.i18nMonths}:DATE:`; break;
|
||||||
case 'week': return $localize`:@@time-span:After ${dateStrings.i18nWeeks}:DATE:`; break;
|
case 'week': return $localize`:@@time-span:After ${dateStrings.i18nWeeks}:DATE:`; break;
|
||||||
@ -163,7 +166,7 @@ export class TimeComponent implements OnInit, OnChanges, OnDestroy {
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (rounded === 1) {
|
if (rounded === 1) {
|
||||||
switch (i) { // singular (1 day)
|
switch (precisionUnit) { // singular (1 day)
|
||||||
case 'year': return dateStrings.i18nYear; break;
|
case 'year': return dateStrings.i18nYear; break;
|
||||||
case 'month': return dateStrings.i18nMonth; break;
|
case 'month': return dateStrings.i18nMonth; break;
|
||||||
case 'week': return dateStrings.i18nWeek; break;
|
case 'week': return dateStrings.i18nWeek; break;
|
||||||
@ -173,7 +176,7 @@ export class TimeComponent implements OnInit, OnChanges, OnDestroy {
|
|||||||
case 'second': return dateStrings.i18nSecond; break;
|
case 'second': return dateStrings.i18nSecond; break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
switch (i) { // plural (2 days)
|
switch (precisionUnit) { // plural (2 days)
|
||||||
case 'year': return dateStrings.i18nYears; break;
|
case 'year': return dateStrings.i18nYears; break;
|
||||||
case 'month': return dateStrings.i18nMonths; break;
|
case 'month': return dateStrings.i18nMonths; break;
|
||||||
case 'week': return dateStrings.i18nWeeks; break;
|
case 'week': return dateStrings.i18nWeeks; break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user