我使用
JavaScript Date对象将毫秒转换为可读分钟:秒格式化字符串.我需要为自定义视频播放器创建一个计时器,我的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给了我两个.
Unix时代是GMT 0
使用新日期在某个时间点获得可靠的毫秒数并将其保留为数字.不要在实际日期对象中进行任何数学运算.
这是我用过的:
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得到秒.