0

我知道这个问题已经被问过很多次了,因为我在 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"]));

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

$end_dateSeptember 22 2013 23:30:00 GMT在 mysql 日期时间

但 jquery 倒数计时器显示:

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

34 天零 6 小时胡说八道是绝对错误的!

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

4

1 回答 1

4

JavaScriptDate对象的构造如下:

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

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

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

资料来源:

编辑:

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

关于 Date 的注释 - JavaScript Date 构造函数需要年、月和日作为参数。但是,月份的范围是从 0 到 11。为了明确指定日期(3 月份是指 3 月还是 4 月?),我将月份指定为 1 到 12 并手动减去 1。因此,以下表示 12 月 25 日, 2010 年。

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

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

链接到jsFiddle

于 2013-09-18T15:40:37.897 回答