使用jquery倒计时器与mysql datetime?

时间:2013-09-18 15:22:43

标签: php jquery mysql

我知道这个问题已被多次询问,因为我在google和stackoverflow上找到了一些问题。

但他们都没有解释如何在我的php中格式化我的日期时间,所以它与jquery倒计时器结合使用。所以我想在这里问一下,希望有人能为我揭开这一点。

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

日期时间存储在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 datetime中的September 22 2013 23:30:00 GMT

但是jquery倒计时器正在显示:

34d 06:21:48
2013, 9, 22, 23, 30, 00
34天和6小时等等等等绝对是错误的!

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

1 个答案:

答案 0 :(得分:4)

JavaScript Date对象的构造如下:

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

这意味着你可能应该沿着这些方向做点什么:

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

来源:

修改

此外,我似乎在jQuery Countdown手册中找到了问题:

  

关于日期的注释 - 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