将秒数转换为天,小时,分钟和秒

Dan*_*nga 17 javascript

我有一个带有停止按钮的无限循环的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();
});
Run Code Online (Sandbox Code Playgroud)
.hide_div {
  display: none;
}

.end {
  display: none;
}
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

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

Nik*_*aut 27

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");
Run Code Online (Sandbox Code Playgroud)

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


And*_*ris 22

我建议这样做!:

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;
}
Run Code Online (Sandbox Code Playgroud)

  • 要删除尾随逗号:- `return (dDisplay + hDisplay + mDisplay + sDisplay).replace(/,\s*$/, "");` (2认同)

sto*_*opa 6

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
Run Code Online (Sandbox Code Playgroud)


Hek*_*tor 1

您可能会发现使用纪元时间戳更简单:如在 JavaScript 中将 Unix 时间戳转换为时间中详细介绍的,基本方法如下所示:

<script>
    // Create a new JavaScript Date object based on the timestamp
    // multiplied by 1000 so that the argument is in milliseconds, not seconds.
    var date1 = new Date();

    alert ('easy trick to waste a few seconds...' + date1);


    // var date = date2 - date1;

    // Hours part from the timestamp
    var hours1 = date1.getHours();
    // Minutes part from the timestamp
    var minutes1 = "0" + date1.getMinutes();
    // Seconds part from the timestamp
    var seconds1 = "0" + date1.getSeconds();


    var date2 = new Date();

    // Hours part from the timestamp
    var hours2 = date2.getHours();
    // Minutes part from the timestamp
    var minutes2 = "0" + date2.getMinutes();
    // Seconds part from the timestamp
    var seconds2 = "0" + date2.getSeconds();


    // Will display time in 10:30:23 format
    // var formattedTime = hours + ':' + minutes.substr(-2) + ':' + seconds.substr(-2);


    var  elapsedHrs = hours2 - hours1;
    var  elapsedMin = minutes2.substr(-2) -minutes1.substr(-2);
    var elapsedSec = seconds2.substr(-2) - seconds1.substr(-2);

    var elapsedTime = elapsedHrs + ' hours, ' + elapsedMin + ' minutes, ' + elapsedSec + ' seconds';

    alert ('time between timestamps: ' + elapsedTime);
</script>
Run Code Online (Sandbox Code Playgroud)

请注意,此脚本需要一些工作,因为目前它会给 date1 = 12:00:00 和 date2 = 12:00:05 之类的负值,但我现在将其留给您。

您应该重写代码,在计时器开始时获取一个时间戳 ( var x = new Date();),并在完成/想要检查经过的时间时获取一个时间戳,并在根据需要解析出经过的秒、分钟、小时等之前将两者相减。