当用户更改其系统时间时,jquery倒计时会发生更改

时间:2015-06-28 08:09:12

标签: php jquery countdown

我正在使用php jquery countdown。我已经给出了一个结束倒计时的结束日期。我的问题是让我们假设倒计时还剩1小时但是当用户改变其系统时间时倒计时会改变。如果用户将时间缩短1小时,那么计数器将显示剩下的2小时。有没有办法让服务器时间更精确的时间而不是用户系统时间。请帮忙。

如何让服务器时间不是用户系统时间?

下面是我的jquery代码

if($(pluginsArray[6]).length){

            $(pluginsArray[6]).each(function(){

                var $this = $(this),
                    dateObj = $this.data();

                var finalDate = new Date(dateObj.year, dateObj.month, dateObj.day, dateObj.hours, dateObj.minutes);

                $this.countdown({
                    timezone: +4, 
                    until : finalDate,
                    expiryText: '<div class="over">Closed.</div>',
                    onExpiry : function(){
                        setTimeout(function( ) { location.reload(); }, 5000);

                    },
                    format :'DHMS',
                    layout : '<b>{dn}</b> <span class="fs_medium d_inline_b m_right_5">days</span> <b>{hn}</b> <span class="fs_medium d_inline_b m_right_5">hrs</span> <b>{mn}</b> <span class="fs_medium d_inline_b m_right_5">min</span> <b>{sn}</b> <span class="fs_medium">sec</span>'
                });

            });


        }

这是我在php中所做的

<div class="countdown color_redc d_inline_m fs_large second_font lh_small f_xs_20" style="font-size:26px;" data-year="<?= $aDate[0] ?>" data-month="<?= ($aDate[1] - 1) ?>" data-day="<?= $aDate[2] ?>" data-hours="<?= $aDate[3] ?>" data-minutes="<?= $aDate[4] ?>"></div>

1 个答案:

答案 0 :(得分:0)

没有PHP的解决方案

如果不编码任何服务器端,您可以使用公共API 来获取当前时间。

在StackoverFlow上找到类似的主题:Free Rest API to get current time as string (timezone irrelevant)

  

TimezoneDb提供免费的API:http://timezonedb.com/api

     

GenoNames还有一个RESTful API可用于获取当前时间   给定的位置:http://www.geonames.org/export/ws-overview.html

     

如果您喜欢GMT,可以使用英国格林威治。

GenoNames 看起来只适用于美国, TimezoneDb 适用于您只需注册免费公钥。

很少有人推荐 timeapi.org ,但看起来他们不接受Ajax中的CROSS-DOMAIN请求,并且他们提供的例子不再可用。

使用PHP和jQuery倒计时配置的解决方案

此外,您可以让jQuery CountDown使用serverSync option

与您的服务器同步
$(selector).countdown({ 
    until:liftoffTime, serverSync: serverTime}); 

function serverTime() { 
    var time = null; 
    $.ajax({url: 'http://myserver.com/serverTime.php', 
        async: false, dataType: 'text', 
        success: function(text) { 
            time = new Date(text); 
        }, error: function(http, message, exc) { 
            time = new Date(); 
    }}); 
    return time; 
}

PHP文件:serverTime.php

<?php 
$now = new DateTime(); 
echo $now->format("M j, Y H:i:s O")."\n"; 
?>

BUT

请记住,您的用户将始终能够更改您的代码并伪造它......所以如果您需要实现某些安全性,这还不够,您需要编写一些后端内容。