问题
I want to convert number (which represents seconds) using DatePipe to get result like this :
00:00:05
I've tried doing so with DatePipe this way:
<label>No timezone (default) {{ 5 * 1000 | date:'h:mm:ss'}}</label>
But it produces result with timezone +4 included (which is not what I want):
4:00:05
So in order to avoid this I'm trying to set timezone offset to 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>
But this time the time is shifted with 12 hours instead of 0:
12:00:05 GMT+0
So is there a way to convert seconds to time with DatePipe without shifted timezone?
Or is there any other pipe by angular which can be used for this purpose?
回答1:
So this quite tricky problem has a quite simple solution.
We just have to use 'H' instead of 'h' (range of which is 0-23).
Example:
<label>{{ 5 * 1000 | date:'H:mm:ss':'UTC'}}</label>
The reason of getting '12' was the usage of 'h' in time format which limits values from 1 to 12 and converts 00:00 to 12:00 (AM).
回答2:
If your problem is just the conversion try this:
var date = new Date(null);
date.setSeconds(SECONDS); // specify value for SECONDS here
var result = date.toISOString().substr(11, 8);
回答3:
This is very easy with 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);
should output 00:01:01
make sure you use moment.utc()
to output and not moment()
to avoid locale settings kicking in.
来源:https://stackoverflow.com/questions/52321653/angular-datepipe-convert-seconds-to-time-with-zero-timezone