我想知道最好的方法是计算从现在到某一点的时间差,比如说倒计时时间。
我有一个在特定时间具有关闭时间的拍卖,该时间以“ DATETIME 00-00-000 00:00:00”的格式存储在MySQL记录中。该记录称为关闭时间。
现在在我的网站上,我有JavaScript代码,这次是通过PHP文件获取的。JavaScript使用每秒循环一次setInterval 1000。PHP文件从数据库获取关闭时间,并以这种格式发送回去
setInterval 1000
strtotime($result['closetime']);
我得到了请求的时间,我想使用服务器时间,而不是JavaScript中的时间,因为用户的时钟可以关闭。
strtotime(date("H:i:s", $_SERVER['REQUEST_TIME']))
我发回这两个时间戳,并在JavaScript中计算它们之间的时差。我使用此函数来执行此操作,从PHP发送回的值称为currentTime和closeTime,我认为这应该很清楚。
function auctionDelayTime(currentTime,closeTime){ totaldelay = closeTime - currentTime; if(totaldelay <= 0){ return 'ended'; }else{ if( days=parseInt((Math.floor(totaldelay/86400))) ) totaldelay = totaldelay % 86400; if( hours=parseInt((Math.floor(totaldelay/3600))) ) totaldelay = totaldelay % 3600; if( minutes=parseInt((Math.floor(totaldelay/60))) ) totaldelay = totaldelay % 60; if( seconds=parseInt((Math.floor(totaldelay/1))) ) totaldelay = totaldelay % 1; return hours+':'+formatTimes(minutes)+':'+formatTimes(seconds); } } function formatTimes(value){ return value < 10 ? '0'+value : value; }
我认为这是很多代码,使事情变得如此简单。有没有人有更好的解决方案或更多的“美丽”代码。
请享用!
使用Date对象。
var d = new Date(difference_in_milliseconds); var seconds = d.getSeconds(); var minutes = d.getMinutes(); var hours = d.getHours() - 1; //See note
注意:奇怪的是,小时值比我不知道的原因要大一倍。看起来“ 1970年1月1日午夜”是凌晨1点:-)
更新:差异1是由于我的时区(GMT +1)的偏移。
轻微的更改将解决此问题:
var d = new Date(); var offset = d.getTimezoneOffset() * 60000; var d = new Date(difference_in_milliseconds + offset); var seconds = d.getSeconds(); var minutes = d.getMinutes(); var hours = d.getHours();