我正在使用JavaScript Date对象将毫秒转换为可读的minutes:seconds
格式的字符串。我需要为自定义视频播放器创建一个计时器,我的JS界面在其中接收视频时长信息(以毫秒为单位)。
在我决定支持录制超过59分钟的视频之前,这是一项微不足道的任务。然后,我遇到了这个问题:当我向新的Date对象的构造函数提交毫秒值,然后调用getHours()
时,即使毫秒数少于一个小时,它也会返回一些值。实际操作中最简单的方法是将其设置为0。
我希望它返回0,但总是返回12(在Opera中为13,这使其更加奇怪)。这是正常现象还是错误?无论哪种方式,我如何可靠地检测到我的毫秒值是否仅限于分钟和秒,或者还包括小时?
谢谢。
UPD:
我已经在OSX的Chrome 15和Firefox 7中对其进行了测试:与上面的屏幕截图相同的结果。我无法弄清楚如何使用Opera Dragonfly控制台,但是从我看到的情况来看,在Opera中也会发生同样的事情,只是getHours()
的值为13。
最佳答案
尝试调用new Date(0).toString()
,看看是否存在影响它的时区?
我的给
"Thu Jan 01 1970 02:00:00 GMT+0200 (FLE Standard Time)"
因为我使用的是GMT + 2,所以
getHours
给了我2。Unix时代是GMT + 0
使用
+new Date
可以在某个时间点获得可靠的毫秒数,并将其保留为数字。不要在实际的日期对象内进行任何数学运算。这是我用过的:
var toTimeString = function( secs ) {
var days, hours, minutes, seconds;
if( secs == null )
return "";
days = ( secs / 86400 ) >> 0;
hours = ( secs % 86400 / 3600 ) >> 0;
minutes = ( secs % 3600 / 60 ) >> 0;
seconds = ( secs % 60 );
seconds = seconds < 10 ? "0" + seconds : seconds;
minutes = minutes < 10 ? "0" + minutes : minutes;
hours = hours && hours < 10 ? "0" + hours : hours;
return "" + ( days ? days+" - " : "" ) + ( hours ? hours+":" : "" ) + minutes + ":" + seconds;
};
根据需要应用自定义格式。。这实际上需要几秒钟,因此将毫秒除以1000可获得秒。
关于javascript - getHours()返回不正确的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8129910/