Arn*_*old 7 javascript formatting date
我使用JavaScript Date对象将毫秒转换为可读minutes:seconds格式的字符串.我需要为自定义视频播放器创建一个计时器,我的JS接口接收视频持续时间信息作为毫秒值.
在我决定支持视频超过59分钟的可能性之前,这是一项相当简单的任务.然后我遇到了这个问题:当我向新的Date对象的构造函数提交毫秒值,然后调用时getHours(),即使毫秒数代表不到一小时的时间段,它也会返回一些东西.看到这个行动的最简单方法是喂它,比方说0.

我希望它返回0,但它总是返回12(Opera中的13,这使得它更奇怪).这是正常行为还是错误?无论哪种方式,我如何可靠地检测我的毫秒值是否仅限于几分钟或几秒还是包括几小时?
谢谢.
UPD:
我在OSX上的Chrome 15和Firefox 7中进行了测试:结果与上面的截图相同.我无法弄清楚如何使用Opera Dragonfly控制台,但从我所看到的同样的事情发生在Opera中,只需要13的值getHours().
trl*_*kly 24
我注意到,虽然人们告诉用户如何修复他的代码,他们没有告诉他如何做他所要求的.答案很简单.不要使用函数getHours().使用getUTCHours().这将绕过任何时区偏移.
如果你需要长达几天,你仍然会遇到问题,但是在那之前,Date原语对你使用它的工作原理会很好.
试着打电话new Date(0).toString(),看看是否有影响它的时区?
我给了
"Thu Jan 01 1970 02:00:00 GMT+0200 (FLE Standard Time)"
Run Code Online (Sandbox Code Playgroud)
因为我在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;
};
Run Code Online (Sandbox Code Playgroud)
根据需要应用自定义格式.这实际上需要几秒钟,因此将毫秒除以1000得到秒.