将 jquery 倒数计时器与 mysql datetime 结合使用


Using jquery countdown timer with mysql datetime?

我知道这个问题已经被问了很多次,因为我在谷歌和堆栈溢出上找到了一些。

但是他们都没有解释如何在我的PHP中格式化我的日期时间,以便它与jQuery倒数计时器结合使用。 所以我要在这里问它,希望有人能为我阐明这一点。

基本上,我要做的是创建一个倒数计时器,它将与mysql日期时间一起使用。

日期时间存储在 mysql 中,因此所有需要做的就是在我的 php 中获取正确的格式,以便倒数计时器可以使用它。

我正在使用这个插件:http://keith-wood.name/countdown.html

这是我到目前为止所拥有的:

PHP格式:

$end_date = date("m d Y H:i:s T", strtotime($row["end_date"])); 

Jquery/Javascript 代码:

<script type="text/javascript">
$(function(){
    var countdown = $('#countdown'),
        ts = new Date(<?php echo $end_date * 1000; ?>),
        finished = true;
    if((new Date()) > ts)
    {
        finished = false;
    }
    $('#defaultCountdown').countdown({
        timestamp   : ts,
        callback    : function(days, hours, minutes, seconds)
        {
            var message = "";
            message += days + " days, ";
            message += hours + " hours, ";
            message += minutes + " minutes, ";
            message += seconds + " seconds ";
            message = (finished ? "Countdown finished" : "left untill the New Year");
            countdown.html(message);
        }
    });
});
</script>

当我运行这段代码时,我得到的只是0 hours, 0 minutes, 0 seconds.

我只能怀疑问题出在我的 php 部分中格式化日期时间!

还是我也错过了别的东西?

好的,我已经设法将代码缩小到:

<script type="text/javascript">
 $(document).ready(function () {
    $('#defaultCountdown').countdown({
        until: new Date(<?php echo $end_date; ?>),
        compact: true
    });
});
</script>

并将 PHP 更改为:

$end_date = date("Y, n, j, G, i, s", strtotime($row["end_date"]));

但是,coutdown计时器中显示的时间是错误的(偏离)。

$end_date是:在 MySQL 日期时间中September 22 2013 23:30:00 GMT

但是 jquery 倒数计时器显示:

34d 06:21:48
2013, 9, 22, 23, 30, 00

34天零6小时等等绝对是错误的!

我现在在这里做错了什么?

JavaScript Date 对象的构造如下:

Date(year, month, day, hours, minutes, seconds, milliseconds)

这意味着您可能应该按照以下思路做一些事情:

$end_date = date("Y, n, j, G, i, s", strtotime($row["end_date"]));

来源:

  • JavaScript Date-object
  • PHP 日期函数

编辑:

另外,我似乎在jQuery倒计时手册中发现了问题:

关于日期的说明 - JavaScript Date 构造函数期望年份, 月和日作为参数。但是,月份的范围从 0 到 11。 明确预期日期(3 月是否表示 3 月 还是四月?我指定从 1 到 12 的月份并手动减去 1. 因此,以下内容表示 2010 年 12 月 25 日。

因此,您必须拆分字符串,从月份中减去 1 并重建......

$tmp_date = explode(', ', $end_date);
$tmp_date[1] = $tmp_date[1] - 1;
$end_date = implode(', ', $tmp_date);

链接到 jsFiddle