以下是将毫秒转换为人类可读时间的方法。但是我得到了一个评论,说它可能会返回一些基数的意外结果。
function msToTime(duration, sign) {
var milliseconds = parseInt((duration % 1000) / 100),
seconds = parseInt((duration / 1000) % 60),
minutes = parseInt((duration / (1000 * 60)) % 60),
hours = parseInt((duration / (1000 * 60 * 60)) % 24);
hours = (hours < 10) ? "0" + hours : hours;
minutes = (minutes < 10) ? " " + minutes : minutes;
seconds = (seconds < 10) ? "0" + seconds : seconds;
return minutes + sign + seconds;
}
$("div").text(msToTime(1203400, ":"));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div></div>
这是我收到的评论:“如果未提供基数,parseInt()
函数可以返回不需要的和/或意外的结果。请确保在所有{{1}上使用基数实例。“
我试图添加日,周,月,年等等,但我不确定这是否正确。它也是音乐的持续时间。所以我认为不会有超过几个小时的情况。
是否有任何想法确保方法的结果始终正确?
答案 0 :(得分:2)
parseInt()将第二个名为radix的参数作为其第二个参数
2到36之间的一个整数,表示基数(基数为 数字数字系统)上面提到的字符串。指定 10为人类常用的十进制数字系统。总是 指定此参数以消除读者的困惑并保证 可预测的行为。不同的实现产生不同 未指定基数时的结果。
由于您正在处理十进制数字系统,请将基数传递为10以解决此类问题
parseInt((duration % 1000) / 100, 10)
答案 1 :(得分:1)
Radix是parseInt()所采用的第二个参数,它是一个数字(从2到36),表示要使用的数字系统。您应该使用10,因为它代表十进制数字系统。
var milliseconds = (parseInt(duration) % 1000) / 100, 10)
如果没有传递基数,将使用以下内容:
如果字符串以&#34; 0x&#34;开头,则基数为16(十六进制)。
如果字符串以&#34; 0&#34;开头,则基数为8(八进制)。这个功能是 已弃用
如果字符串以任何其他值开头,则基数为10 (十进制)
如果您不想总是指定它,请创建如下函数:
function parseInt10(val){
return parseInt(val,10);
}
答案 2 :(得分:0)
其他答案提供了一些关于parseInt()
的建议,这些建议在技术上是正确的,但与您的实际代码无关,因为您甚至不需要在函数中使用parseInt()
。
由于您似乎已经将一个数字(不是字符串)传递到您的函数中,您甚至不需要任何parseInt()
操作,并且可以像这样简化它:
function msToTime(duration, sign) {
var milliseconds = (duration % 1000) / 100,
seconds = (duration / 1000) % 60,
minutes = (duration / (1000 * 60)) % 60,
hours = (duration / (1000 * 60 * 60)) % 24;
hours = (hours < 10) ? "0" + hours : hours;
minutes = (minutes < 10) ? " " + minutes : minutes;
seconds = (seconds < 10) ? "0" + seconds : seconds;
return minutes + sign + seconds;
}
如果你希望你的函数接受一段时间内传入的数字或字符串,你可以这样支持:
function msToTime(t, sign) {
var duration = +t;
var milliseconds = (duration % 1000) / 100,
seconds = (duration / 1000) % 60,
minutes = (duration / (1000 * 60)) % 60,
hours = (duration / (1000 * 60 * 60)) % 24;
hours = (hours < 10) ? "0" + hours : hours;
minutes = (minutes < 10) ? " " + minutes : minutes;
seconds = (seconds < 10) ? "0" + seconds : seconds;
return minutes + sign + seconds;
}
而且,如果您使用parseInt()
,则会将持续时间转换为数字:
var d = parseInt(duration, 10);
然后,在计算中使用该值。正如您的代码现在所说的那样,您在数学计算结果上调用了parseInt()
,这意味着您在一个没有做任何事情的数字上调用parseInt
。