Angular DatePipe - 将秒数转换为零时区时间(12 而不是 00)

Angular DatePipe - Convert seconds to time with zero timezone (12 instead of 00)

我想使用 DatePipe 转换数字(代表秒) 得到这样的结果:

00:00:05

我试过用 DatePipe 这样做:

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

但它产生的结果包含时区 +4(这不是我想要的):

4:00:05

所以为了避免这种情况,我尝试将时区偏移设置为 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>

但是这次时间错了 12 小时而不是 0:

12:00:05 GMT+0

那么有没有一种方法可以在不改变时区的情况下使用 DatePipe 将秒数转换为时间?
或者 angular 是否有其他管道可用于此目的?

如果您的问题只是转换问题,试试这个:

var date = new Date(null);
date.setSeconds(SECONDS); // specify value for SECONDS here
var result = date.toISOString().substr(11, 8);

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);

应该输出00:01:01

确保使用 moment.utc() 输出而不是 moment() 以避免区域设置启动。

所以这个相当棘手的问题有一个非常简单的解决方案。
我们只需要使用 'H' 而不是 'h'(范围是 0-23)。
示例:

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

得到 '12' 的原因是 'h' 在时间格式中的使用,其中 limits 值从 1 到 12 并将 00:00 转换为 12:00 (AM ).