小编典典

在PHP / MySQL / JavaScript系统中计算时差

ajax

我想知道最好的方法是计算从现在到某一点的时间差,比如说倒计时时间。

我有一个在特定时间具有关闭时间的拍卖,该时间以“ DATETIME 00-00-000 00:00:00”的格式存储在MySQL记录中。该记录称为关闭时间。

现在在我的网站上,我有JavaScript代码,这次是通过PHP文件获取的。JavaScript使用每秒循环一次setInterval 1000。PHP文件从数据库获取关闭时间,并以这种格式发送回去

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;
}

我认为这是很多代码,使事情变得如此简单。有没有人有更好的解决方案或更多的“美丽”代码。

请享用!


阅读 226

收藏
2020-07-26

共1个答案

小编典典

使用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();
2020-07-26