2016-07-18 7 views
-1

初めてサーバーから時間を取得し、毎秒JavaScriptで更新したいと考えています。これは私のコードです:PHPからの入手時間とjavascriptによる更新

setInterval(function() { 
    var myvar = '<?php echo strtotime($now); ?>' 
    var hours = myvar.getHours(); 
    var minutes = "0" + myvar.getMinutes(); 
    var seconds = "0" + myvar.getSeconds(); 
    myvar=hours + ':' + minutes.substr(-2) + ':' + seconds.substr(-2); 
    document.getElementById("time").innerHTML=myvar; 
}, 1000); 

しかし、2行目にエラーがあります。エラーは "myvarはコンストラクタではありません"です。それでどうすればいい?

+1

どのようなエラーが発生していますか? – Hardik

+0

あなたは ''<?php echo strtotime($ now);ということに気づいていますか? ?> ''はサーバーコールではありませんか?今のように毎秒同じ時刻を設定しようとしています。 – Cerbrus

+1

この質問はなぜ投票されるのですか? – BeetleJuice

答えて

0

第一の問題を更新することはできませんあなたのPHPには整数をエコーし​​、その整数にmyvarを設定していることです。整数にはgetMinutes,getHours ...機能はありません。代わりにDateオブジェクトを使用します。

第2の問題は、すべての反復が初期値(PHPエコーはブラウザがページをダウンロードする前に一度だけ実行される)にリセットされるため、実際に時間が進まないことです。毎回正しい時刻を保持するために必要なのはmyvarです。

第3の問題は、setTimeoutを1回だけ実行するということです。代わりに、毎秒実行されるsetIntervalを使用する必要があります。

ソリューションは、関数の外start時間を設定し、それをインクリメントし、それを各ラウンドを使用することです:

//PHP will set the start time 
var start = <?=time()?>; 

setInterval(function(){ 
    //add 1 second and set myvar to the correct current time 
    start++; 
    var myvar = new Date(start * 1000); 
    ... 
},1000); 

PHPを書き込むときにいくつかの時間の間に経過するので、あなたは、小さな調整をする必要がありstartの値、およびJavaScriptがロードされてブラウザで実行された時刻。これにより、JSのタイムラグがサーバ時間より少し遅れることになります。

Live demo

+0

お返事ありがとうございます。時間:分を使用し、毎分更新する場合はどうすればよいですか?私はstart ++をstart = start + 60と1000〜60000に変更しましたが、それは真実ではありませんでした。 – shekoufeh

+0

今、別の質問をしています。私はあなたが働かせるための調整を期待しています。そうでない場合は、新しい質問を開きます。新しいコードを表示し、結果を得て、あなたが得ようとしていることを説明してください。 – BeetleJuice

0

strtotimeは、現在の時刻を表す整数を返します。

これを変数に文字列として格納しています。

setInterval(function() { 
    var myvar = '1468845612' 

myvarが、普通の文字列です:
あなたのコンパイル済みのPHPファイルは次のようになります。その文字列には.getHours関数がありません。

var myvar = new Date(<?php echo strtotime($now); ?>000); 

レンダリング出力::私はそこに000を追加する方法

var myvar = new Date(1468845612000); 

はお知らせ

はこれにvar myvarラインことを置き換えます。

strtotimeはタイムスタンプを秒単位で返します。 JavaScriptのDateコンストラクタでは、ミリ秒単位のタイムスタンプが必要です。


つまり、setIntervalコールは無意味です。

PHPのスニペットは、ページの読み込み時に1回だけ実行されます。その後、間隔は実行されるたびに同じ日付が表示されます。

0

.getHours()、.getMinutes()関数は、php dateではなくjavascriptの日付でのみ使用できます。あなたが使用できる一つの方法は次のとおりです。

setInterval(function() { 
    var myvar = new Date(); 
    var hours = myvar.getHours(); 
    var minutes = "0" + myvar.getMinutes(); 
    var seconds = "0" + myvar.getSeconds(); 
    myvar=hours + ':' + minutes.substr(-2) + ':' + seconds.substr(-2); 
    document.getElementById("time").innerHTML=myvar; 
}, 1000); 

あなたがPHPを使用する場合は、時間に

+0

私が最初に望むサーバ時間を言う。 – shekoufeh

関連する問題