Javascript 拍卖式倒计时

Javascript 拍卖式倒计时,javascript,php,mysql,Javascript,Php,Mysql,我已经试了好几天了,所以我最后想我应该问一下。下面我将发布我所拥有的,任何直接的解决方案都会很好。我会尽量详细 我需要创造什么 与MySQL交互的拍卖类型倒计时,用于检索相关项目的结束时间。我还将使用Javascript获得一个实时倒计时动画。它需要使用服务器的时间,而不是用户的时间在他们的计算机上,它似乎不工作 使用的文件类型 PHP、Javascript、MySQL 特别说明 我还必须确保时间来自服务器,而不是目标计算机。如果有更好的方法来做我正在尝试的事情,请让我知道。我已经做了大量的研究

我已经试了好几天了,所以我最后想我应该问一下。下面我将发布我所拥有的,任何直接的解决方案都会很好。我会尽量详细

我需要创造什么

与MySQL交互的拍卖类型倒计时,用于检索相关项目的结束时间。我还将使用Javascript获得一个实时倒计时动画。它需要使用服务器的时间,而不是用户的时间在他们的计算机上,它似乎不工作

使用的文件类型

PHP、Javascript、MySQL

特别说明

我还必须确保时间来自服务器,而不是目标计算机。如果有更好的方法来做我正在尝试的事情,请让我知道。我已经做了大量的研究,但仍然无法使这项工作

文件名

数据库信息

数据库注释:结束时间是一个时间戳

index.php

以下文件是函数文件。在这里,我假设我需要更改或执行一些操作,以便它可以加载服务器时间而不是本地时间

functions.php

现在,这在一定程度上是可行的。然而,如果我改变了我的本地时间,我可以绕过它,而不是服务器时间,因为这是不能改变的

我遗漏了什么?

问题在于:

   this.currentTime=new Date()
您正在使用本地客户端日期作为当前日期。相反,你应该像传递目标日期一样传递它

像这样

   (php)
   $current_time = date( 'Y-m-d H:i:s' );

   (javascript)
   var futuredate = new cdtime( "countdowncontainer", "<? echo $current_time; ?>", "<? echo $end_time; ?>")
完成此操作后,您可以让时钟与超时功能同步

然而,这会导致时间慢慢流逝,有时会注意到它在eBay上是如何做到这一点的


方法是,时不时地向服务器询问时间。并重置“currentTime”。您可以通过使用PHP实现一个简单的服务来实现这一点,该服务返回时间(可能是JSON),然后使用AJAX调用它。

更好的方法是以毫秒或秒为单位检索计数器长度,然后将其传递给javascript函数以创建targetdate。这样,倒计时是相对于用户的。例如:

用户居住在距离服务器5小时的时区内 服务器的倒计时将在2013年12月4日17:00结束 对于实际用户,倒计时将在2013年12月4日22:00结束。 如果不将其保留在用户本地,则计时将不正确,并且很容易开始混淆用户

向日期添加毫秒的示例这会向Javascript日期添加5小时:

var targetdate=new Date(currentTime.getTime() + 18000000);
使用Javascript获取时差的示例:

// PHP
//Get current date
$currdate = date('Y-m-d H:i:s');
$end_time = $row['end_date'];   // 2013-12-11 00:00:00
$end_time = $end_time;

// Javascript
//Pass current date to the Javascript function
var futuredate=new cdtime("countdowncontainer", "<? echo $currdate; ?>", "<? echo $end_time; ?>")

function cdtime(container, currentdate, targetdate) {
    if (!document.getElementById || !document.getElementById(container)) return
    this.container = document.getElementById(container)
    this.currentTime = new Date()
    //Creates temp date variables
    var curDate = new Date(currentdate);
    var endDate = new Date(targetdate);
    //Gets time Difference in Milliseconds
    var diff = endDate.getTime() - curDate.getTime();
    //Sets targetdate to be the current date + the difference
    this.targetdate = new Date(currentTime.getTime() + diff)
    this.timesup = false
    this.updateTime()
}

this.currentTime=新日期使用本地日期,因为它是在客户端执行的。您应该用PHP获取当前时间戳,并将其交给cdtime函数:这样就永远不会使用本地日期。编辑:为什么没有;在您的代码中?最好是在倒计时结束之前,以秒为单位计算还剩多长时间,然后将其传递给Javascript,并根据还剩多长时间设置时间。这会让它对用户来说是本地的,而且更有意义。对不起,你在mysql上把我弄丢了。我如何将当前时间戳添加到cdtime函数中?我如何像在目标日期那样传递它?想法?是的,完全一样,只是使用date-answer Updated的输出。我喜欢这个想法,现在只需要找出如何做到这一点/@user3063070-请参阅我的更新答案,以了解使用Javascript执行此操作的示例。我从PHP获取当前日期,并将其传递给javascript函数,以毫秒为单位获得差值。您可以在PHP中执行此操作,然后传递毫秒,但我发现的示例相当大
   this.currentTime=new Date()
   (php)
   $current_time = date( 'Y-m-d H:i:s' );

   (javascript)
   var futuredate = new cdtime( "countdowncontainer", "<? echo $current_time; ?>", "<? echo $end_time; ?>")
   function cdtime(container, currentdate, targetdate) {
     ...
     this.currentdate=new Date(currentdate)
var targetdate=new Date(currentTime.getTime() + 18000000);
// PHP
//Get current date
$currdate = date('Y-m-d H:i:s');
$end_time = $row['end_date'];   // 2013-12-11 00:00:00
$end_time = $end_time;

// Javascript
//Pass current date to the Javascript function
var futuredate=new cdtime("countdowncontainer", "<? echo $currdate; ?>", "<? echo $end_time; ?>")

function cdtime(container, currentdate, targetdate) {
    if (!document.getElementById || !document.getElementById(container)) return
    this.container = document.getElementById(container)
    this.currentTime = new Date()
    //Creates temp date variables
    var curDate = new Date(currentdate);
    var endDate = new Date(targetdate);
    //Gets time Difference in Milliseconds
    var diff = endDate.getTime() - curDate.getTime();
    //Sets targetdate to be the current date + the difference
    this.targetdate = new Date(currentTime.getTime() + diff)
    this.timesup = false
    this.updateTime()
}