Ну, это не значит, что вид не обновляется.Если вы внимательно посмотрите, какой вывод вы получите в консоли - это всегда одна и та же дата.Реализация получения разницы во времени довольно грязная и может быть выполнена лучше.
Без каких-либо внешних утилитных функций реализация может выглядеть следующим образом:
import { Component, OnInit } from '@angular/core';
import {Observable} from 'rxjs/Rx';
import {DateUtil} from '../utils/DateUtil';
import * as moment from 'moment';
@Component({
selector: 'app-time-difference',
templateUrl: './time-difference.component.html',
styleUrls: ['./time-difference.component.css']
})
export class TimeDifferenceComponent implements OnInit {
orderTime = '14-09-2018 14:00:00';
clock: Observable<any>;
constructor() { }
ngOnInit() {
// order date in millis (can be computed once)
const orderDate: number = moment(this.orderTime, 'DD-MM-YYYY HH:mm:ss').valueOf();
this.clock = Observable
.interval(1000)
.map(() => {
return Date.now() - orderDate;
});
this.clock.subscribe(
res => console.log(res) // Output difference in millis
);
}
}
И в шаблоне выможет использовать конвейер угловой даты следующим образом:
<div class="row mt-5 ml-5" style="margin-left:20px;">
{{(clock | async) | date:'dd HH:mm:ss'}}
</div>
Если вам нужен какой-то специальный формат даты в выходных данных, вы можете отобразить наблюдаемые часы любым удобным для вас способом.Например:
const orderDate: number = moment(this.orderTime, 'DD-MM-YYYY HH:mm:ss').valueOf();
this.clock$ = Observable
.interval(1000)
.map(() => {
return Date.now() - orderDate;
})
.map((millis: number) => {
return moment.duration(millis);
})
.publishReplay(1).refCount(); // so that calculation is performed once no matter how many subscribers
this.days$ = this.clock$.map(date => date.days());
this.hours$ = this.clock$.map(date => date.hours());
this.minutes$ = this.clock$.map(date => date.minutes());
this.seconds$ = this.clock$.map(date => date.seconds());
И в шаблоне:
<ul>
<li><span id="days">{{days$ | async}}</span>Days</li>
<li><span id="hours">{{hours$ | async}}</span>Hours</li>
<li><span id="minutes">{{minutes$ | async}}</span>Minutes</li>
<li><span id="seconds">{{seconds$ | async}}</span>Seconds</li>
</ul>
Надеюсь, это поможет.