我想知道从现在到某一点计算时间差的最佳方法是什么,比如倒数时间.
我有一个在某个时间点有关闭时间的拍卖,这个时间以“DATETIME 00-00-000 00:00:00”格式存储在MySQL记录中.此记录称为关闭时间.
现在在我的网站上,我有JavaScript代码通过PHP文件获取此时间. JavaScript使用setInterval 1000每秒循环.PHP文件从db获取关闭时间,并以此格式将其发回
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;
}
我认为这是一个非常多的代码做一些如此简单的事情.有没有人有更好的解决方案或更多’美丽’的代码.
请享用!
解决方法:
var d = new Date(difference_in_milliseconds);
var seconds = d.getSeconds();
var minutes = d.getMinutes();
var hours = d.getHours() - 1; //See note
注意:奇怪的是,由于我不理解的原因,小时值比我预期的大1.看起来像“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();
标签:php,javascript,ajax,datetime
来源: https://codeday.me/bug/20190710/1423331.html