2

入力: 秒、出力: 文法的に正しい、書式設定された時間 (スペルアウトされた単語付き)。

これまでのところ、正しい複数形とコンマに注意してください400443731 year, 98 days, 5 hours, 37 minutes, 1 second

私が見逃しているのは、最後のコンマの代わりに追加される「and」です (もちろん、十分な入力がある場合のみ)。たとえば、その場合の現在の代わりに1 year and 1 second入力します。315569531 year, 1 second

function formatDuration (seconds) {

var numyears = Math.floor(seconds / 31556952);
if (numyears > 1) {var pluryears = " years, "} else {var pluryears = " year, "};
if (numyears > 0) {var printyears = numyears + pluryears;} else {var printyears = ''};

var numdays = Math.floor((seconds % 31556952) / 86400);
if (numdays > 1) {var plurdays = " days, "} else {var plurdays = " day, "};
if (numdays > 0) {var printdays = numdays + plurdays;} else {var printdays = ''};

var numhours = Math.floor(((seconds % 31556952) % 86400) / 3600);
if (numhours > 1) {var plurhours = " hours, "} else {var plurhours = " hour, "};
if (numhours > 0) {var printhours = numhours + plurhours;} else {var printhours = ''};

var numminutes = Math.floor((((seconds % 31556952) % 86400) % 3600) / 60);
if (numminutes > 1) {var plurminutes = " minutes, "} else {var plurminutes = " minute, "};
if (numminutes > 0) {var printminutes = numminutes + plurminutes;} else {var printminutes = ''};

var numseconds = (((seconds % 31556952) % 86400) % 3600) % 60;
if (numseconds > 1) {var plurseconds = " seconds"} else {var plurseconds = " second"};
if (numseconds > 0) {var printseconds = numseconds + plurseconds;} else {var printseconds = ''};

return(printyears + printdays + printhours + printminutes + printseconds)
}

formatDuration(31556953);
4

5 に答える 5

3

意図したとおりに時刻文字列を出力するもう少しコンパクトなソリューション:

function formatDuration (seconds) {
  var values = {
    years: Math.floor(seconds / 31556952),
    days: Math.floor((seconds % 31556952) / 86400),
    hours: Math.floor(((seconds % 31556952) % 86400) / 3600),
    minutes: Math.floor((((seconds % 31556952) % 86400) % 3600) / 60),
    seconds: (((seconds % 31556952) % 86400) % 3600) % 60,
  };
  var withUnits = Object.keys(values)
  .filter(function(unit) { return values[unit] > 0; })
  .map(function (unit) {
    var value = values[unit];
    return value + ' ' + (value === 1 ? unit.slice(0, -1) : unit);
  });
  return (withUnits.length > 1 ? withUnits.slice(0, -1).join(', ') + ' and ' : '') + withUnits.pop();
}

console.log(formatDuration(40044373));
于 2016-08-16T20:45:33.737 に答える
1

最後のコンマを置き換えるちょっとした正規表現:

return (printyears + printdays + printhours + printminutes + printseconds)
    .replace(/, (.*)$/, " and $1");
于 2016-08-16T20:22:33.493 に答える
0

戻り値に「and」を追加するだけです。

return(printyears + printdays + printhours + printminutes + 'and' + printseconds)

そして、この行の「分」の後のコンマを削除します

if (numminutes > 1) {var plurminutes = " minutes "} else {var plurminutes = " minute "};
于 2016-08-16T20:23:23.573 に答える