我有一个以分钟为单位的给定持续时间,例如100分钟、140分钟。我需要以“XX小时YY分钟”格式显示它们。例如:我更喜欢用date-fns或普通的JS来做这件事。谢谢
r1zhe5dt1#
要将以分钟为单位的持续时间转换为“XX小时和YY分钟"格式,可以使用以下算法:通过将持续时间(分钟)除以60并取结果的整数部分来计算持续时间中的小时数。例如,如果持续时间为140分钟,则小时数为140/60 = 2。从总持续时间中减去小时数后,通过取上一除法的余数来计算剩余分钟数。例如,如果持续时间为140分钟,并且我们已经计算出有2小时,则剩余分钟数为140%60 = 20。使用以下模式设置结果的格式:“XX小时YY分钟"。如果没有小时,则省略“小时”部分。如果没有分钟,则省略“分钟”部分。例如,如果持续时间为140分钟,则结果应为“2小时20分钟”。此算法的示例程序:
function formatDuration(duration) { const hours = Math.floor(duration / 60); const minutes = duration % 60; if (hours === 0) { return `${minutes} minute${minutes !== 1 ? 's' : ''}`; } else if (minutes === 0) { return `${hours} hour${hours !== 1 ? 's' : ''}`; } else { return `${hours} hour${hours !== 1 ? 's' : ''} and ${minutes} minute${minutes !== 1 ? 's' : ''}`; } } console.log(formatDuration(1)); // output: 1 minute console.log(formatDuration(100)); // output: 1 hour and 40 minutes console.log(formatDuration(141)); // output: 2 hours and 21 minutes
zpjtge222#
const totalMinutes = 140; const minutes = totalMinutes % 60; const hours = (totalMinutes - minutes) / 60 const s1 = `${totalMinutes} => ${hours} hour${hours>1?'s':''} and ` const s2 = `${minutes} minute${minutes>1?'s':''}` console.log(hours>0?s1+s2:s2)
1.您引用了"XX hours and YY minute(s)",但在示例中使用了一位数。1.假设您想要“小时”,而不是“小时”的多个小时?
"XX hours and YY minute(s)"
sq1bmfud3#
不需要date-fns,也不需要任何用于这种方式的库。您的浏览器支持使用i18 n格式设置时间、日期和持续时间。
const divMod = (n, m) => [Math.floor(n / m), n % m]; const createDurationFormatter = (locale, unitDisplay = 'long') => { const timeUnitFormatter = (locale, unit, unitDisplay) => Intl.NumberFormat(locale, { style: 'unit', unit, unitDisplay }).format, fmtHours = timeUnitFormatter(locale, 'hour', unitDisplay), fmtMinutes = timeUnitFormatter(locale, 'minute', unitDisplay), fmtList = new Intl.ListFormat(locale, { style: 'long', type: 'conjunction' }); return (minutes) => { const [hrs, mins] = divMod(minutes, 60); return fmtList.format([ hrs ? fmtHours(hrs) : null, mins ? fmtMinutes(mins) : null ].filter(v => v !== null)); } }; let durationFormatterEn = createDurationFormatter('en-US'); console.log(durationFormatterEn(1)); // 1 minute console.log(durationFormatterEn(100)) // 1 hour and 40 minutes console.log(durationFormatterEn(141)) // 2 hours and 21 minutes let durationFormatterEs = createDurationFormatter('es-US'); console.log(durationFormatterEs(1)); // 1 minuto console.log(durationFormatterEs(100)) // 1 hora y 40 minutos console.log(durationFormatterEs(141)) // 2 horas y 21 minutos let durationFormatterEn2 = createDurationFormatter('en-US', 'short'); console.log(durationFormatterEn2(1)); // 1 min console.log(durationFormatterEn2(100)) // 1 hr and 40 min console.log(durationFormatterEn2(141)) // 2 hr and 21 min
.as-console-wrapper { top: 0; max-height: 100% !important; }
一个更强大的解决方案是要求毫秒,并格式化为天:一个二个一个一个
sulc1iza4#
以下是我的版本。
function amountToTimeFormat(minutes) { const _hours = Math.floor(minutes / 60); const _mins = minutes % 60; let resHour = _hours.toString().padStart(2, '0'); let resMin = _mins.toString().padStart(2, '0'); resHour = resHour > 0 ? resHour+' Hrous':''; resMin = resMin > 0 ? resMin+' minutes':''; return `${resHour} ${resMin}`; } console.log(amountToTimeFormat(60)) console.log(amountToTimeFormat(141)) console.log(amountToTimeFormat(100))
4条答案
按热度按时间r1zhe5dt1#
要将以分钟为单位的持续时间转换为“XX小时和YY分钟"格式,可以使用以下算法:
通过将持续时间(分钟)除以60并取结果的整数部分来计算持续时间中的小时数。例如,如果持续时间为140分钟,则小时数为140/60 = 2。
从总持续时间中减去小时数后,通过取上一除法的余数来计算剩余分钟数。例如,如果持续时间为140分钟,并且我们已经计算出有2小时,则剩余分钟数为140%60 = 20。
使用以下模式设置结果的格式:“XX小时YY分钟"。如果没有小时,则省略“小时”部分。如果没有分钟,则省略“分钟”部分。例如,如果持续时间为140分钟,则结果应为“2小时20分钟”。
此算法的示例程序:
zpjtge222#
一个简单的解决方案
你在格式上自相矛盾
1.您引用了
"XX hours and YY minute(s)"
,但在示例中使用了一位数。1.假设您想要“小时”,而不是“小时”的多个小时?
sq1bmfud3#
不需要date-fns,也不需要任何用于这种方式的库。
您的浏览器支持使用i18 n格式设置时间、日期和持续时间。
一个更强大的解决方案是要求毫秒,并格式化为天:
一个二个一个一个
sulc1iza4#
以下是我的版本。