如何使用JavaScript的float-only数学计算时差?

时间:2014-08-26 10:05:16

标签: javascript

目标:从过去获取Unix时间值,并以“10h 18m 22s”格式表示其与当前时间的偏差。

当前代码:

function humaniseTime(epoch) {
  nowtime = (new Date).getTime()/1000; // current ms to s
  secs = Math.round(nowtime-epoch);

  hours = secs/3600;
  secs -= hours*3600;

  minutes = secs/60;
  secs -= minutes*60;

  clockstring = hours + "h " + minutes + "m " + secs + "s";
  return clockstring;
}

问题在于,因为JavaScript不使用整数而是使用浮点数,所以我最终得到0.564166666小时而不是0小时17分22秒。使用舍入函数给我带来负面的时间,这是不好的。

1 个答案:

答案 0 :(得分:0)

我为你写了另一个与你不同的解决方案,但是像魅力一样工作,这里是代码:

function secondsToString(seconds)
{
    var numyears = Math.floor(seconds / 31536000);
    var numdays = Math.floor((seconds % 31536000) / 86400); 
    var numhours = Math.floor(((seconds % 31536000) % 86400) / 3600);
    var numminutes = Math.floor((((seconds % 31536000) % 86400) % 3600) / 60);
    var numseconds = (((seconds % 31536000) % 86400) % 3600) % 60;
    return numyears + " years " +  numdays + " days " + numhours + " hours " + numminutes + " minutes " + numseconds + " seconds";

}

var epoch = Math.floor(1294862756114/1000);  //in your case this will be function argument, converting it into seconds as well
alert("Epoch: " + epoch)
var time = Math.floor((new Date().getTime())/1000);
alert("Current Time: " + time);
var difference = time-epoch;
alert("Difference: " + secondsToString(difference));

相当直接的,希望你在理解它时不会遇到问题。我基本上添加了一个函数,它将秒数转换为年,月,日,小时数。您现在可以随意使用它来保留您需要的任何值。

<强> See the deamo here