使用 Luxon,将持续时间转换为具有以下格式 T-HH:MM:SS 的倒计时的最佳方法是什么?
Using Luxon, what is the best way to convert a duration into a countdown with the following format T-HH:MM:SS?
我正在通过一些数组方法传递一个看起来像这个 PT43H22M15S 的时间值,这样当它计数时它可以从另一边出来,看起来像这样 43:22:15。我这样做的方式是这样的...
return this.millisRemaining$.pipe(
map((val) => {
console.log(val);
const duration = Duration.fromMillis(val);
console.log(duration);
const result = duration
.shiftTo('hours', 'minutes', 'seconds')
.toString();
console.log(result);
return result;
}),
map((val) => {
console.log(`from tap: ${val}`);
const slicedVal = val.slice(2);
console.log(slicedVal);
const replacedVal = slicedVal
.replace('H', ':')
.replace('M', ':')
.replace('S', '');
console.log(replacedVal);
return replacedVal;
})
);
}
但是,我有一个问题。假设我想从 43 小时开始。输出将为 43:
,如果前面的数字为 0,则不会显示。喜欢 :11 ... :10 ... :9 ...etc
如何让它显示 43:00:00 and :09 ... :08
等?
使用 toFormat 函数:https://moment.github.io/luxon/api-docs/index.html#durationtoformat
堆栈闪电战:
https://stackblitz.com/edit/node-v364nf?file=index.js
在使用 Luxon 版本 2.3.1 的 NodeJS 中:
import { Duration } from 'luxon';
const duration1 = Duration.fromObject({ hour: 43 });
const output1 = duration1.toFormat('T-hh:mm:ss');
console.log(output1); //T-43:00:00
const duration2 = duration1.minus({ hours: 3, minutes: 33, seconds: 33 });
const output2 = duration2.toFormat('T-hh:mm:ss');
console.log(output2); //T-39:26:27
const isoDuration = Duration.fromISO('PT43H22M15S');
const output3 = isoDuration.toFormat('T-hh:mm:ss');
console.log(output3); //T-43:22:15
代码结果:
❯ npm run start
$ node index.js
T-43:00:00
T-39:26:27
T-43:22:15
我正在通过一些数组方法传递一个看起来像这个 PT43H22M15S 的时间值,这样当它计数时它可以从另一边出来,看起来像这样 43:22:15。我这样做的方式是这样的...
return this.millisRemaining$.pipe(
map((val) => {
console.log(val);
const duration = Duration.fromMillis(val);
console.log(duration);
const result = duration
.shiftTo('hours', 'minutes', 'seconds')
.toString();
console.log(result);
return result;
}),
map((val) => {
console.log(`from tap: ${val}`);
const slicedVal = val.slice(2);
console.log(slicedVal);
const replacedVal = slicedVal
.replace('H', ':')
.replace('M', ':')
.replace('S', '');
console.log(replacedVal);
return replacedVal;
})
);
}
但是,我有一个问题。假设我想从 43 小时开始。输出将为 43:
,如果前面的数字为 0,则不会显示。喜欢 :11 ... :10 ... :9 ...etc
如何让它显示 43:00:00 and :09 ... :08
等?
使用 toFormat 函数:https://moment.github.io/luxon/api-docs/index.html#durationtoformat
堆栈闪电战: https://stackblitz.com/edit/node-v364nf?file=index.js
在使用 Luxon 版本 2.3.1 的 NodeJS 中:
import { Duration } from 'luxon';
const duration1 = Duration.fromObject({ hour: 43 });
const output1 = duration1.toFormat('T-hh:mm:ss');
console.log(output1); //T-43:00:00
const duration2 = duration1.minus({ hours: 3, minutes: 33, seconds: 33 });
const output2 = duration2.toFormat('T-hh:mm:ss');
console.log(output2); //T-39:26:27
const isoDuration = Duration.fromISO('PT43H22M15S');
const output3 = isoDuration.toFormat('T-hh:mm:ss');
console.log(output3); //T-43:22:15
代码结果:
❯ npm run start
$ node index.js
T-43:00:00
T-39:26:27
T-43:22:15