Quiero convertir un número (que representa segundos) usando DatePipe para obtener un resultado como este:

00:00:05

He intentado hacerlo con DatePipe de esta manera:

<label>No timezone (default) {{ 5 * 1000 | date:'h:mm:ss'}}</label>

Pero produce resultados con la zona horaria +4 incluida (que no es lo que quiero):

4:00:05

Entonces, para evitar esto, estoy tratando de establecer el desplazamiento de la zona horaria en 0:

<label>{{ 5 * 1000 | date:'h:mm:ss z':'+0000'}}</label>
<label>{{ 5 * 1000 | date:'h:mm:ss z':'UTC'}}</label>
<label>{{ 5 * 1000 | date:'h:mm:ss z':'GMT'}}</label>
<label>{{ 5 * 1000 | date:'h:mm:ss z':'GMT+0'}}</label>
<label>{{ 5 * 1000 | date:'h:mm:ss z':'UTC+0'}}</label>

Pero esta vez el tiempo se cambia con 12 horas en lugar de 0:

12:00:05 GMT + 0

Entonces, ¿hay alguna manera de convertir segundos a tiempo con DatePipe sin zona horaria desplazada?
¿O hay alguna otra tubería angular que pueda usarse para este propósito?

4
Just Shadow 13 sep. 2018 a las 23:52

3 respuestas

La mejor respuesta

Entonces, este problema bastante complicado tiene una solución bastante simple.
Solo tenemos que usar 'H' en lugar de 'h' (cuyo rango es 0-23).
Ejemplo:

<label>{{ 5 * 1000 | date:'H:mm:ss':'UTC'}}</label>

La razón para obtener '12' fue el uso de 'h' en formato de tiempo que limita valores del 1 al 12 y convierte 00:00 a 12:00 (AM).

enter image description here

6
Just Shadow 13 sep. 2018 a las 22:48

Si su problema es solo la conversión, intente esto:

var date = new Date(null);
date.setSeconds(SECONDS); // specify value for SECONDS here
var result = date.toISOString().substr(11, 8);
0
R. Richards 13 sep. 2018 a las 21:04

Esto es muy fácil con MomentJS

const SECONDS_COUNT = 61;

const duration = moment.duration(SECONDS_COUNT, 'seconds');
const resultstring = moment.utc(duration.asMilliseconds()).format('HH:mm:ss');
console.log(resultstring);

Debería salir 00:01:01

Asegúrese de utilizar moment.utc() para generar y no moment() para evitar la configuración regional.

2
Stavm 13 sep. 2018 a las 21:25