javascript倒计时在不同浏览器上同步

javascript倒计时在不同浏览器上同步,javascript,Javascript,如果这个问题有点棘手的话,我很抱歉,但我没有其他的方法来问这个问题,而且我在javascript世界里是一个绝对的noob 我有一个javascript计数器,有人帮我在stackoverflow上收集它,它工作得很好,但是 倒计时计时器将在不同的浏览器上从头开始 i、 当我在Firefox上看到它时,它会继续倒数,并且会继续正常工作。假设计时器设置为一天倒计时。在Firefox上,它将显示还剩23:24小时/分钟,但如果我打开任何浏览器的新浏览器,它将显示还剩23:59小时/分钟的计时器,并从

如果这个问题有点棘手的话,我很抱歉,但我没有其他的方法来问这个问题,而且我在javascript世界里是一个绝对的noob

我有一个javascript计数器,有人帮我在stackoverflow上收集它,它工作得很好,但是 倒计时计时器将在不同的浏览器上从头开始

i、 当我在Firefox上看到它时,它会继续倒数,并且会继续正常工作。假设计时器设置为一天倒计时。在Firefox上,它将显示还剩23:24小时/分钟,但如果我打开任何浏览器的新浏览器,它将显示还剩23:59小时/分钟的计时器,并从那里开始倒计时。。。即使倒计时已经在同一页上运行

代码如下:

 <script type="text/javascript">
var EXPIRY = parseInt(new Date().getTime()/1000) + 24*60*60;
var counter = null;
var counter_interval = null;

function setCookie(name,value,days) {
    console.log("setting "+name+" "+value);
    var expires;
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        expires = "; expires="+date.toGMTString();
    }
    else {
        expires = "";
    }
    document.cookie = name+"="+value+expires+"; path=/";    
}

function getCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') {
            c = c.substring(1,c.length);
        }
        if (c.indexOf(nameEQ) === 0) {
            return c.substring(nameEQ.length,c.length);
        }
    }
    return null;
}

function deleteCookie(name) {
    setCookie(name,"",-1);
}

function resetCounter() {
    EXPIRY = parseInt(new Date().getTime()/1000) + 24*60*60;
}

function stopCounter() {
    window.clearInterval(counter_interval);
    deleteCookie('Expiry');
}

function updateCounter() {
    var msg = '';
    curTime = parseInt(new Date().getTime()/1000);
    if (curTime < EXPIRY) {
        msg = convertSecondsToDays(EXPIRY - curTime);
    }
    else {
        EXPIRY = parseInt(new Date().getTime()/1000) + 24*60*60;
    }
    var el = document.getElementById('counter');
    if (el) {
        el.innerHTML = msg
    }
}

function convertSecondsToDays(sec) {
  var days, hours,rem,mins,secs;
  days =  parseInt(sec/(24*3600));
  rem = sec - days*3600
  hours = parseInt(rem/3600);
  rem = rem - hours*3600;
  mins = parseInt(rem/60);
  secs = rem - mins*60;
  return days +":" + hours +":"+mins + ":"+ secs + "";
}

function startCounter() {
    stopCounter();
    setCookie('Expiry', EXPIRY, 1);
    counter_interval = window.setInterval(updateCounter, 1000);
}

function init() {
    EXPIRY = getCookie('Expiry');
    if (!EXPIRY) {
        console.log("unable to find cookie");
        resetCounter();
    }
    startCounter();
}

init();
</script>
您可以在这里的小提琴上查看它:

如何使它在所有浏览器上显示的时间与在同一页面上显示的时间相同

谢谢

编辑:

我发现这段代码与mysql一起工作。它工作正常,但它不会倒计时,而是显示产品/项目在网站上发布的天数/小时/分钟。这不需要任何javascript,就像现在一样

这正是我想要的,但它需要倒计时,而不是倒计时:

    <?php



//list fields and convert to seconds

$countdown['days']=(5) * 24 * 60 * 60;

$countdown['hours']=(3) * 60 * 60;

// etc, etc

$countsum=time() + $countdown['days'] + $countdown['hours']; //and so on

// the above would be the timestamp to enter into the table



##########



// 'dumbed down' query
include "config/connect_to_mysql.php";

$result=mysql_query("SELECT * FROM tomProduct WHERE id='id';");



while ($row=mysql_fetch_assoc($result))

    $time=$row['date_added'] - time(); //this field would be a PHP timestamp (time())



$count=getdate($time);



$x=getdate(); //todays information



$count['mday'] -= $x['mday'];

$count['hour'] -= $x['mday'];

$count['minutes'] -= $x['minutes'];



echo "$count[mday] Days $count[hour] Hours $count[minutes] Minutes"; //etc



// untested, but should work

?>

JavaScript始终在客户端上运行。计时器的一个实例不知道在其他地方运行的任何其他实例

要在不同浏览器之间同步时间,需要服务器端脚本。
在服务器端脚本中使用过期时间戳,并结合使用JavaScript计时器,应该可以实现所需的同步。

JavaScript始终在客户端上运行。计时器的一个实例不知道在其他地方运行的任何其他实例

要在不同浏览器之间同步时间,需要服务器端脚本。
将服务器端脚本中的过期时间戳与JavaScript计时器结合使用,应该可以实现所需的同步。

cookie不会从浏览器传输到浏览器。它们存储在web浏览器中。

Cookie不会在浏览器之间传输。它们存储在web浏览器中。

几天前,我确实发布了一个关于PHP倒计时的问题,这是一个服务器端脚本,但我被无缘无故地训斥了,我被指责不知道服务器端和客户端之间的区别!!!那么,你知道我如何使用PHP做同样的事情吗?@DavidSmith你之前的问题是要一个纯PHP解决方案。你需要两者的结合,对于一个响应计时器,它也会同步:@DavidSmith你的PHP在这种情况下将保持实际剩余时间或它应该过期的时间,你将在页面加载时获取该时间,并使用javascript/jquery显示一个倒计时计时器。这确保了计时器的同步,以及响应的倒计时。谢谢。你能让我看看我能看到的例子吗?@DavidSmith。这应该会让你对如何去做有一个公平的想法。它在浏览器之间同步剩余时间(以秒为单位)。希望它有用,不要太简单:Good luckI在几天前发布了一个关于PHP倒计时的问题,这是一个服务器端脚本,但是我被无缘无故地训斥了,我被指责不知道服务器端和客户端之间的区别!!!那么,你知道我如何使用PHP做同样的事情吗?@DavidSmith你之前的问题是要一个纯PHP解决方案。你需要两者的结合,对于一个响应计时器,它也会同步:@DavidSmith你的PHP在这种情况下将保持实际剩余时间或它应该过期的时间,你将在页面加载时获取该时间,并使用javascript/jquery显示一个倒计时计时器。这确保了计时器的同步,以及响应的倒计时。谢谢。你能让我看看我能看到的例子吗?@DavidSmith。这应该会让你对如何去做有一个公平的想法。它在浏览器之间同步剩余时间(以秒为单位)。希望它有用,不要太简单:好运气这是无状态代码应该做的?@adeneo,这正是代码应该做的。这是无状态代码应该做的?@adeneo,这正是代码应该做的。