Estoy tratando de implementar un temporizador de cuenta regresiva usando rxjs en mi aplicación angular 12. En mis ts tengo:
let timeLeft$ = interval(1000).pipe( map(x => this.calcTimeDiff(orderCutOffTime)), shareReplay(1) );calcTimeDiff() devolverá segundos, minutos y horas;
Tengo que crear una cadena a partir de esto y mostrarla en el HTML. Básicamente, reemplace una palabra existente en la cadena con timeLeft$, que será un temporizador de cuenta regresiva que se mostrará en el HTML.
Algo como: this.orderCutOffMessage = someString.replace('Down', timeLeft$)
https://henrikmassow.medium.com/implement-a-countdown-timer-with-rxjs-in-angular-61600d1af00c
orderCutOffTime = "1645567200000" // Marca de tiempo de Unix en milisegundos
private calcTimeDiff(cutOffTime: any): timeComponents { const finalCutOffTime = (cutOffTime).valueOf(); const milliSecondsInASecond = 1000; const hoursInADay = 24; const minutesInAnHour = 60; const secondsInAMinute = 60; const timeDifference = finalCutOffTime - Date.now(); const hoursToFinalCutOffTime = Math.floor( (timeDifference / (milliSecondsInASecond * minutesInAnHour * secondsInAMinute)) % hoursInADay ); const minutesToFinalCutOffTime = Math.floor( (timeDifference / (milliSecondsInASecond * minutesInAnHour)) % secondsInAMinute ); const secondsToFinalCutOffTime = Math.floor(timeDifference / milliSecondsInASecond) % secondsInAMinute; return { secondsToFinalCutOffTime, minutesToFinalCutOffTime, hoursToFinalCutOffTime };}
Aquí hay un ejemplo funcional de su código https://stackblitz.com/edit/angular-material-table-data-source-znbvdb . Básicamente es casi como el del enlace que compartió, excepto que se cambiaron los nombres de las vars, se descartó una var (días) y todo se colocó en un archivo .ts. Por favor, hágame saber si eso es lo que está buscando. Su orderCutOffTime ha sido codificado, pero probablemente lo obtenga en alguna suscripción para que pueda modificarlo. Además, timeString probablemente también proviene de la suscripción.