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)