Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | 36x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 10x 1x 3x 3x 14x 14x 13x 13x 13x 13x 13x 13x 13x 1x 1x 1x 1x 424x 424x 4x 3x 3x 3x 1x | import { NgIf } from '@angular/common';
import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core';
import { interval, Subscription } from 'rxjs';
@Component({
selector: 'app-countdown',
imports: [NgIf],
templateUrl: './countdown.component.html',
styleUrl: './countdown.component.css'
})
export class CountdownComponent implements OnInit, OnChanges, OnDestroy{
@Input() targetTimestamp: number|null = null;
days: number | null = null;
hours: number | null = null;
minutes: number | null = null;
seconds: number | null = null;
private subscription: Subscription | null = null;
isPositiveTime = false;
targetDate: Date | null = null;
localTimeZone: string;
localMonth: string;
UTCMonth: string;
ngOnInit() {
this.targetTimestamp = null;
this.updateTarget();
this.updateTime();
this.subscription = interval(100).subscribe(() => this.updateTime());
this.localTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
}
ngOnChanges(){
this.updateTarget();
this.updateTime();
}
ngOnDestroy() {
this.subscription?.unsubscribe();
}
private updateTime() {
const now = Math.floor(Date.now() / 1000);
if (this.targetTimestamp !== null){
let diff = this.targetTimestamp - now;
this.isPositiveTime = diff < 0;
Iif (this.isPositiveTime) {
diff = -diff;
}
this.days = Math.floor(diff / 86400);
this.hours = Math.floor((diff % 86400) / 3600);
this.minutes = Math.floor((diff % 3600) / 60);
this.seconds = Math.floor(diff % 60);
}
else{
this.days = null;
this.hours = null;
this.minutes = null;
this.seconds = null;
}
}
formatNumber(value: number | null): string {
Iif (value === null){
return '--';
}
return value < 10 ? '0' + value : value.toString();
}
updateTarget(){
if (this.targetTimestamp !== null){
this.targetDate = new Date(this.targetTimestamp*1000);
this.localMonth = this.targetDate.toLocaleString('en-US', { month: 'long' });
this.UTCMonth = this.targetDate.toLocaleString('en-US', { month: 'long', timeZone: 'UTC' });
}
else{
this.targetDate = null;
}
}
}
|