12

我想使用 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:

格林威治标准时间+0 12:00:05

那么有没有办法在不改变时区的情况下使用 DatePipe 将秒转换为时间?
或者是否有任何其他角度的管道可用于此目的?

4

3 回答 3

22

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

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

获得“12”的原因是时间格式中“h”的使用将值限制在 1 到 12 之间并将 00:00 转换为 12:00 (AM)。

在此处输入图像描述

于 2018-09-13T22:48:40.110 回答
3

使用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()避免启用语言环境设置。

于 2018-09-13T21:25:31.000 回答
0

如果您的问题只是转换,请尝试以下操作:

var date = new Date(null);
date.setSeconds(SECONDS); // specify value for SECONDS here
var result = date.toISOString().substr(11, 8);
于 2018-09-13T21:02:36.637 回答