Learn rxjs
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/4.0.8/rx.all.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.11.2/moment.js"></script>
<pre id="counter"></pre>
TypeScript
const source = Rx.Observable.interval(1000);
const startDate = moment().add(1, 'minute');
const stream = Rx.Observable.merge(
Rx.Observable.of(undefined),
Rx.Observable.interval(10000)
).map(i => startDate);
Rx.Observable
.combineLatest(source, stream)
.map(([counter, value]) => {
return moment(value).diff(moment());
})
.distinctUntilChanged()
.filter(value => value > 0)
.subscribe(value => {
console.log(moment.utc(value).format('HH:mm:ss'));
});