将秒转换为天、小时、分钟和秒

IT技术 javascript
2021-02-20 04:04:47

我有一个带有停止按钮的无限循环的 Javascript 计时事件。

单击开始按钮时它将显示数字。现在我希望将这些数字转换为 4 小时 3 分钟 50 秒

var c = 0;
var t;
var timer_is_on = 0;

function timedCount() {
  document.getElementById('txt').value = c;
  c = c + 1;
  t = setTimeout(function() {
    timedCount()
  }, 1000);
}

function doTimer() {
  if (!timer_is_on) {
    timer_is_on = 1;
    timedCount();
  }
}

function stopCount() {
  clearTimeout(t);
  timer_is_on = 0;

}

$(".start").on("click", function() {
  //var start = $.now();
  //alert(start);
  //console.log(start);
  doTimer();
  $(".end").show();
  $(".hide_div").show();
});
$(".end").on("click", function() {
  stopCount();
});
.hide_div {
  display: none;
}

.end {
  display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<p class="start">Start</p>
<p class="end">End</p>
<p class="hide_div">
  <input type="text" id="txt" />//display numbers eg 12345
</p>

如何将 123456 之类的数字转换为 1 天 4 小时 40 分 45 秒?

6个回答

我建议这样做!:

function secondsToDhms(seconds) {
seconds = Number(seconds);
var d = Math.floor(seconds / (3600*24));
var h = Math.floor(seconds % (3600*24) / 3600);
var m = Math.floor(seconds % 3600 / 60);
var s = Math.floor(seconds % 60);

var dDisplay = d > 0 ? d + (d == 1 ? " day, " : " days, ") : "";
var hDisplay = h > 0 ? h + (h == 1 ? " hour, " : " hours, ") : "";
var mDisplay = m > 0 ? m + (m == 1 ? " minute, " : " minutes, ") : "";
var sDisplay = s > 0 ? s + (s == 1 ? " second" : " seconds") : "";
return dDisplay + hDisplay + mDisplay + sDisplay;
}
很酷的想法是只包含所需的单位,但是当较小的单位值不存在时,以下返回尾随逗号: secondsToDhms(60)returns 1 minute, secondsToDhms(3600)returns1 hour, secondsToDhms(86400)returns 1 day,
2021-04-24 04:04:47
要删除尾随逗号:- return (dDisplay + hDisplay + mDisplay + sDisplay).replace(/,\s*$/, "");
2021-05-01 04:04:47
供参考 - 添加了一个基于您的答案的迭代并解决了我上一条评论中提到的一些问题: stackoverflow.com/a/56913131
2021-05-05 04:04:47

Math像这样使用,第二个参数parseInt是基数,这是可选的

var seconds = parseInt(123456, 10);

var days = Math.floor(seconds / (3600*24));
seconds  -= days*3600*24;
var hrs   = Math.floor(seconds / 3600);
seconds  -= hrs*3600;
var mnts = Math.floor(seconds / 60);
seconds  -= mnts*60;
console.log(days+" days, "+hrs+" Hrs, "+mnts+" Minutes, "+seconds+" Seconds");

你给秒1234561 days, 10 Hrs, 17 Minutes, 36 Seconds1 days, 4 Hrs, 40 Minutes, 45 Seconds

function countdown(s) {

  const d = Math.floor(s / (3600 * 24));

  s  -= d * 3600 * 24;

  const h = Math.floor(s / 3600);

  s  -= h * 3600;

  const m = Math.floor(s / 60);

  s  -= m * 60;

  const tmp = [];

  (d) && tmp.push(d + 'd');

  (d || h) && tmp.push(h + 'h');

  (d || h || m) && tmp.push(m + 'm');

  tmp.push(s + 's');

  return tmp.join(' ');
}

// countdown(3546544) -> 41d 1h 9m 4s
// countdown(436654) -> 5d 1h 17m 34s
// countdown(3601) -> 1h 0m 1s
// countdown(121) -> 2m 1s

我的 map() 和 reduce() 解决方案:

const intervalToLevels = (interval, levels) => {
  const cbFun = (d, c) => {
    let bb = d[1] % c[0],
      aa = (d[1] - bb) / c[0];
    aa = aa > 0 ? aa + c[1] : '';

    return [d[0] + aa, bb];
  };

  let rslt = levels.scale.map((d, i, a) => a.slice(i).reduce((d, c) => d * c))
    .map((d, i) => ([d, levels.units[i]]))
    .reduce(cbFun, ['', interval]);
  return rslt[0];
};

const TimeLevels = {
  scale: [24, 60, 60, 1],
  units: ['d ', 'h ', 'm ', 's ']
};
const secondsToString = interval => intervalToLevels(interval, TimeLevels);

如果你打电话secondsToString(123456),你可以得到“1d 10h 17m 36s”

对本线程中建议的一些解决方案提出了我自己的变体。

if (!Number.prototype.secondsToDHM) {
    Number.prototype.secondsToDHM = function() {
        const secsPerDay = 86400;
        const secsPerHour = 3600;
        const secsPerMinute = 60;

        var seconds = Math.abs(this);
        var minus   = (this < 0) ? '-' : '';
        
        var days    = Math.floor(seconds / secsPerDay);
        seconds     = (seconds % secsPerDay);
        var hours   = Math.floor(seconds / secsPerHour);
        seconds     = (seconds % secsPerHour);
        var minutes = Math.floor(seconds / secsPerMinute);
        seconds     = (seconds % secsPerMinute);

        var sDays    = new String(days).padStart(1, '0');
        var sHours   = new String(hours).padStart(2, '0');
        var sMinutes = new String(minutes).padStart(2, '0');

        return `${minus}${sDays}D ${sHours}:${sMinutes}`;
    }
}

var a = new Number(50000).secondsToDHM();
var b = new Number(100000).secondsToDHM();
var c = new Number(200000).secondsToDHM();
var d = new Number(400000).secondsToDHM();

console.log(a);
console.log(b);
console.log(c);
console.log(d);

谢谢你,你节省了我一些时间😊
2021-05-13 04:04:47
别提了。
2021-05-17 04:04:47