Moment.js 将 x 分钟转换为 y 小时 z 分钟
Moment.js convert x minutes to y hours z minutes
所以我有一个数字,例如90
。我想做的是将它转换为 "1 hr 30 mins"
。我试过这个:
moment.utc(
moment.duration(90, "minutes")
.asMilliseconds()
).format("h:mm")
这个returns1:30
.
如果它这样做,
moment.utc(
moment.duration(90, "minutes")
.asMilliseconds()
).format("h [hour] mm [minutes]")
,然后我得到 1 hour 30 minutes
。
这很好,但是如果我插入 180,那么我会得到 3 hour 00 minutes
,但它应该是 3 hours
。 00分钟应该省略,当小时数大于1时,hour应该是hours。分钟也一样。
moment.js可以吗?
您可以编写一些自定义代码来解决问题,如下所示:
const time1 = moment.utc(
moment.duration(180, "minutes")
.asMilliseconds()
)
const time2 = moment.utc(
moment.duration(90, "minutes")
.asMilliseconds()
)
function formatTime(time) {
const minutes = time.minutes();
const hours = time.hours();
const hourFormatStr = hours === 1 ? 'hour' : 'hours';
const minuteFormatStr = minutes === 1 ? 'minute' : 'minutes';
if (!time.minutes()) {
return time.format(`h [${hourFormatStr}]`);
}
return time.format(`h [${hourFormatStr}] mm [${minuteFormatStr}]`);
}
console.log(formatTime(time1));
console.log(formatTime(time2));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
此外,我发现 this library,它似乎可以完成您想要的工作。
我认为 moment js 不可能。
我们必须根据获得的小时和分钟值动态构建格式。请检查下面的代码。
input=180;
hour=Math.floor(input/60);
min=input%60;
format = "";
//console.log(hour);
//console.log(min);
if (hour>1 && min>1)
format = "h [hours] mm [minutes]";
else if (hour>1 && min==1)
format = "h [hours] mm [minute]";
else if (hour>1 && min==0)
format = "h [hours]";
else if( hour==0 && min>1)
format = "m [minutes]";
else if (hour==0 && min<=1)
format = "mm [minute]";
else
format="";
//console.log(format);
moment.utc(
moment.duration(input, "minutes")
.asMilliseconds()
).format(format)
所以我有一个数字,例如90
。我想做的是将它转换为 "1 hr 30 mins"
。我试过这个:
moment.utc(
moment.duration(90, "minutes")
.asMilliseconds()
).format("h:mm")
这个returns1:30
.
如果它这样做,
moment.utc(
moment.duration(90, "minutes")
.asMilliseconds()
).format("h [hour] mm [minutes]")
,然后我得到 1 hour 30 minutes
。
这很好,但是如果我插入 180,那么我会得到 3 hour 00 minutes
,但它应该是 3 hours
。 00分钟应该省略,当小时数大于1时,hour应该是hours。分钟也一样。
moment.js可以吗?
您可以编写一些自定义代码来解决问题,如下所示:
const time1 = moment.utc(
moment.duration(180, "minutes")
.asMilliseconds()
)
const time2 = moment.utc(
moment.duration(90, "minutes")
.asMilliseconds()
)
function formatTime(time) {
const minutes = time.minutes();
const hours = time.hours();
const hourFormatStr = hours === 1 ? 'hour' : 'hours';
const minuteFormatStr = minutes === 1 ? 'minute' : 'minutes';
if (!time.minutes()) {
return time.format(`h [${hourFormatStr}]`);
}
return time.format(`h [${hourFormatStr}] mm [${minuteFormatStr}]`);
}
console.log(formatTime(time1));
console.log(formatTime(time2));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
此外,我发现 this library,它似乎可以完成您想要的工作。
我认为 moment js 不可能。
我们必须根据获得的小时和分钟值动态构建格式。请检查下面的代码。
input=180;
hour=Math.floor(input/60);
min=input%60;
format = "";
//console.log(hour);
//console.log(min);
if (hour>1 && min>1)
format = "h [hours] mm [minutes]";
else if (hour>1 && min==1)
format = "h [hours] mm [minute]";
else if (hour>1 && min==0)
format = "h [hours]";
else if( hour==0 && min>1)
format = "m [minutes]";
else if (hour==0 && min<=1)
format = "mm [minute]";
else
format="";
//console.log(format);
moment.utc(
moment.duration(input, "minutes")
.asMilliseconds()
).format(format)