Moment.js将x分钟转换为y小时z分钟

问题描述 投票:1回答:2

所以我有一个数字,例如90。我要做的是将其转换为"1 hr 30 mins"。我已经试过了:

moment.utc(
    moment.duration(90, "minutes")
    .asMilliseconds()
).format("h:mm")

这将返回1:30

如果这样做,

moment.utc(
    moment.duration(90, "minutes")
    .asMilliseconds()
).format("h [hour] mm [minutes]")

,然后我得到1 hour 30 minutes

这很好,但是如果我插入180,则得到3 hour 00 minutes,但应该是3 hours。当小时数大于1时,应省略00分钟,hour应为hours。分钟也是如此。

moment.js是否可能?

javascript momentjs date-formatting
2个回答
0
投票

您可以编写一些自定义代码来解决此问题,如下所示:

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,它似乎可以完成您想要的工作。


0
投票

我认为使用momemt 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)
© www.soinside.com 2019 - 2024. All rights reserved.