0

このスクリプトをクライアント時間ではなくサーバー時間で使用することは可能ですか? (時間が経過しているかどうかを確認するため)クライアント時間を使用するようになりましたが、それが問題です。(おそらくphpで??)

<script>
var end = new Date('02/19/2012 10:1 AM');

    var _second = 1000;
    var _minute = _second * 60;
    var _hour = _minute * 60;
    var _day = _hour * 24;
    var timer;

    function showRemaining() {
        var now = new Date();
        var distance = end - now;
        if (distance < 0) {

            clearInterval(timer);
            document.getElementById('countdown').innerHTML = 'EXPIRED!';

            return;
        }
        var days = Math.floor(distance / _day);
        var hours = Math.floor((distance % _day) / _hour);
        var minutes = Math.floor((distance % _hour) / _minute);
        var seconds = Math.floor((distance % _minute) / _second);

        document.getElementById('countdown').innerHTML = days + 'days ';
        document.getElementById('countdown').innerHTML += hours + 'hrs ';
        document.getElementById('countdown').innerHTML += minutes + 'mins ';
        document.getElementById('countdown').innerHTML += seconds + 'secs';
    }

    timer = setInterval(showRemaining, 1000);
</script>
<div id="countdown"></div>
4

3 に答える 3

0

Puku の回答は、サーバー時間ではなく固定の日付を返します。彼はそれを修正したようです。

私が提案する:

<script>
    var date = <? echo time(); ?>;
    // etc...
</script>

これは、Unix エポック IIRC からの (サーバー) 秒数をフェッチし、変数「date」に int として詰め込みます。<?との間のすべて?>が PHP であるため、サーバー上で実行されることに注意してください。

puku のような省略構文は使用していないことに注意してください。私はデフォルトでそれを持っていないし、それを変更することもできないので、同じ問題を抱えている人のためにこの表記法を使用するといいと思いました.

于 2013-10-07T15:18:33.297 に答える
0

http://www.roseindia.net/ajax/ajax-first-example.shtmlで、Ajax に似た例を見つけました。

[更新] 以前の投稿でこれがうまくいかなかったというコメントの後、私はすべてを見直し、JavaScript と PHP ファイルを変更しました (現在、完全なコードを提供しています)。このコードは機能するようになりました。最適化するのではなく、元の例と以前に提供されたリンクにできるだけ似たものにしようとしました(それはあなたに任せます)。

<script>
var end = new Date('02/19/2014 10:1 AM');
var _second = 1000;
var _minute = _second * 60;
var _hour = _minute * 60;
var _day = _hour * 24;
var timer;
var distance;

function startShowRemaining(strnow) {
    var now = new Date(strnow);
    distance = end - now;
    //To prevent 1 sec. lag, we make first a direct call to showRemaining
    showRemaining(); 
    //Then each second, we decrement count and show info
    timer = setInterval(countRemaining, 1000);
}
function countRemaining() {
    distance = distance - 1000; //we substract a second (1000 ms) with each call
    showRemaining();
}
function showRemaining() {
    if (distance < 0) {
        clearInterval(timer);
        document.getElementById('countdown').innerHTML = 'EXPIRED!';
        return;
    }
    var days = Math.floor(distance / _day);
    var hours = Math.floor((distance % _day) / _hour);
    var minutes = Math.floor((distance % _hour) / _minute);
    var seconds = Math.floor((distance % _minute) / _second);

    document.getElementById('countdown').innerHTML = days + ' days ';
    document.getElementById('countdown').innerHTML += hours + ' hrs ';
    document.getElementById('countdown').innerHTML += minutes + ' mins ';
    document.getElementById('countdown').innerHTML += seconds + ' secs';        
}
function postRequest(strURL) {
    var xmlHttp;
    if (window.XMLHttpRequest) { // Mozilla, Safari, ...
        var xmlHttp = new XMLHttpRequest();
    } else if (window.ActiveXObject) { // IE
        var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlHttp.open('POST', strURL, true);
    xmlHttp.setRequestHeader('Content-Type', 
       'application/x-www-form-urlencoded');
    xmlHttp.onreadystatechange = function() {
        if (xmlHttp.readyState == 4) {
            startShowRemaining(xmlHttp.responseText);
        }
    }
    xmlHttp.send(strURL);
}

postRequest('time.php');  

</script>
<div id="countdown"></div>    

そしてファイルを作成します:time.php

<?php
print date("d/m/Y H:i:s");
?>

PHP ファイルは現在の日付を取得するために 1 回呼び出され、帯域幅を使用するさらなる Ajax 呼び出しを防ぐために、「距離」変数が 1 秒ごとに減らされます。とにかく 1 秒以上かかる可能性があります。デクリメントには別の関数が使用されるため、デクリメントせずにすぐに showRemaining を呼び出すことができます (最初の呼び出しで 1000 を増やし始め、1 つの関数のみを使用することもできます..)。

とにかく、PHP を使用して「現在」の変数に適切な値を書き込む Puku アプローチを好みます。より簡単です。これは、Ajax の使用例としてのみ有効です。

于 2013-10-07T15:29:26.987 に答える