2

この質問が少しトリッキーである場合は申し訳ありませんが、私はそれを尋ねる他の方法がなく、私はjavascriptの世界では絶対的な初心者です。

私は誰かがstackoverflowで収集するのを手伝ってくれたこのjavascriptカウンターを持っていて、それは正常に動作しますが、カウントダウンタイマーは別のブラウザーで最初から開始されます。

つまり、Firefoxで見ると、カウントダウンが続き、正常に機能し続けます。タイマーが1日カウントダウンに設定されているとしましょう。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>

あなたはここでフィドルでそれを見ることができます:http://jsfiddle.net/h2DEr/1/

同じページに表示されるのと同じ時間にすべてのブラウザに表示されるようにするにはどうすればよいですか?

ありがとう

編集:

私は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

?>
4

2 に答える 2

3

JavaScriptは常にクライアントで実行されています。タイマーの1つのインスタンスは、他の場所で実行されている他のインスタンスを認識していません。

異なるブラウザ間で時刻を同期するには、サーバー側のスクリプトが必要になります。サーバーサイドスクリプトで有効期限タイムスタンプをJavaScriptタイマーと組み合わせて使用​​すると、探している同期が得られるはずです。

于 2013-03-26T19:13:11.193 に答える
1

クッキーはブラウザからブラウザに転送されません。それらはWebブラウザに保存されます。

于 2013-03-26T19:14:45.093 に答える