2011-12-18 11 views
1

私の質問は単純ですが、私はそれを回避する方法を見つけることができません。私は10分、PHPファイルを実行し、カウントダウンが再び再開を終了するために実行するためにサーバーの時間カウントダウンスクリプトが必要です。 私はjQueryスクリプトを読んだことがありますが、それらはすべて特定の日付までカウントダウンしてから停止します。カウントダウン10分、.phpファイルを実行し、再起動

このようなスクリプトを見つけるために誰でも正しい方向に向けることができますか?

これは私が

<style style="text/css"> 

.lcdstyle{ /*Example CSS to create LCD countdown look*/ 
background-color:black; 
color:lime; 
font: bold 18px MS Sans Serif; 
padding: 3px; 
} 

.lcdstyle sup{ /*Example CSS to create LCD countdown look*/ 
font-size: 80% 
} 

</style> 

<script type="text/javascript"> 



function cdLocalTime(container, servermode, offsetMinutes, targetdate, debugmode){ 
if (!document.getElementById || !document.getElementById(container)) return 
this.container=document.getElementById(container) 
var servertimestring=(servermode=="server-php")? '<? print date("F d, Y H:i:s", time())?>' : (servermode=="server-ssi")? '<!--#config timefmt="%B %d, %Y %H:%M:%S"--><!--#echo var="DATE_LOCAL" -->' : '<%= Now() %>' 
this.localtime=this.serverdate=new Date(servertimestring) 
this.targetdate=new Date(targetdate) 
this.debugmode=(typeof debugmode!="undefined")? 1 : 0 
this.timesup=false 
this.localtime.setTime(this.serverdate.getTime()+offsetMinutes*60*1000) //add user offset to server time 
this.updateTime() 
} 

cdLocalTime.prototype.updateTime=function(){ 
var thisobj=this 
this.localtime.setSeconds(this.localtime.getSeconds()+1) 
setTimeout(function(){thisobj.updateTime()}, 1000) //update time every second 
} 

cdLocalTime.prototype.displaycountdown=function(baseunit, functionref){ 
this.baseunit=baseunit 
this.formatresults=functionref 
this.showresults() 
} 

cdLocalTime.prototype.showresults=function(){ 
var thisobj=this 
var debugstring=(this.debugmode)? "<p style=\"background-color: #FCD6D6; color: black; padding: 5px\"><big>Debug Mode on!</big><br /><b>Current Local time:</b> "+this.localtime.toLocaleString()+"<br />Verify this is the correct current local time, in other words, time zone of count down date.<br /><br /><b>Target Time:</b> "+this.targetdate.toLocaleString()+"<br />Verify this is the date/time you wish to count down to (should be a future date).</p>" : "" 

var timediff=(this.targetdate-this.localtime)/1000 //difference btw target date and current date, in seconds 
if (timediff<0){ //if time is up 
this.timesup=true 
this.container.innerHTML=debugstring+this.formatresults() 
return 
} 
var oneMinute=60 //minute unit in seconds 
var oneHour=60*60 //hour unit in seconds 
var oneDay=60*60*24 //day unit in seconds 
var dayfield=Math.floor(timediff/oneDay) 
var hourfield=Math.floor((timediff-dayfield*oneDay)/oneHour) 
var minutefield=Math.floor((timediff-dayfield*oneDay-hourfield*oneHour)/oneMinute) 
var secondfield=Math.floor((timediff-dayfield*oneDay-hourfield*oneHour-minutefield*oneMinute)) 
if (this.baseunit=="hours"){ //if base unit is hours, set "hourfield" to be topmost level 
hourfield=dayfield*24+hourfield 
dayfield="n/a" 
} 
else if (this.baseunit=="minutes"){ //if base unit is minutes, set "minutefield" to be topmost level 
minutefield=dayfield*24*60+hourfield*60+minutefield 
dayfield=hourfield="n/a" 
} 
else if (this.baseunit=="seconds"){ //if base unit is seconds, set "secondfield" to be topmost level 
var secondfield=timediff 
dayfield=hourfield=minutefield="n/a" 
} 
this.container.innerHTML=debugstring+this.formatresults(dayfield, hourfield, minutefield, secondfield) 
setTimeout(function(){thisobj.showresults()}, 1000) //update results every second 
} 

/////CUSTOM FORMAT OUTPUT FUNCTIONS BELOW////////////////////////////// 

//Create your own custom format function to pass into cdLocalTime.displaycountdown() 
//Use arguments[0] to access "Days" left 
//Use arguments[1] to access "Hours" left 
//Use arguments[2] to access "Minutes" left 
//Use arguments[3] to access "Seconds" left 

//The values of these arguments may change depending on the "baseunit" parameter of cdLocalTime.displaycountdown() 
//For example, if "baseunit" is set to "hours", arguments[0] becomes meaningless and contains "n/a" 
//For example, if "baseunit" is set to "minutes", arguments[0] and arguments[1] become meaningless etc 

//1) Display countdown using plain text 
function formatresults(){ 
if (this.timesup==false){//if target date/time not yet met 
var displaystring="<span style='background-color: #CFEAFE'>"+arguments[2]+" minutes "+arguments[3]+" seconds</span> left until launch time" 
} 
else{ //else if target date/time met 
var displaystring="Launch time!" 
} 
return displaystring 
} 

//2) Display countdown with a stylish LCD look, and display an alert on target date/time 
function formatresults2(){ 
if (this.timesup==false){ //if target date/time not yet met 
var displaystring="<span class='lcdstyle'>"+arguments[2]+" <sup>minutes</sup> "+arguments[3]+" <sup>seconds</sup></span> left until launch time" 
} 
else{ //else if target date/time met 
var displaystring="" //Don't display any text 
alert("Launch time!") //Instead, perform a custom alert 
} 
return displaystring 
} 

</script> 

<div id="cdcontainer"></div> 

<script type="text/javascript"> 
//cdLocalTime("ID_of_DIV_container", "server_mode", LocaltimeoffsetMinutes, "target_date", "opt_debug_mode") 
//cdLocalTime.displaycountdown("base_unit", formatfunction_reference) 

//Note: "launchdate" should be an arbitrary but unique variable for each instance of a countdown on your page: 

var launchdate=new cdLocalTime("cdcontainer", "server-php", 0, "April 28, 5012 00:05:00", "debugmode") 
launchdate.displaycountdown("days", formatresults2) 
</script> 

任意のアイデアを持っているものでしょうか?

+4

を、これはバックグラウンド・プロセスか何かのように動作するはずのものですクライアント側? "cron"は、スクリプトの実行のバックグラウンドスケジューリングのためにあなたのサーバタイプに依存しているものです。 – Scuzzy

+0

私は視覚的なカウントダウンが必要なので、この方法で実行したいと思います。今私はcronを使用していますが、私は次の実行が行われるときに視覚的なカウントダウンを持っていません。それはサーバー側になります。 – user631756

+0

どのような目的のためのカウントダウン? PHP側では、実際に*カウントダウン*を使用することはありません。ちょうどPHPが次に呼び出されるたびにチェックされます。このデッドラインのコンセプトを複数の連続したデッドラインに拡張することは困難ではないはずです... – deceze

答えて

2

これは、ページのロードに30分にクロックを初期化チャンクである:ここで何が起こっている

$date = date('i'); 
$sec = date('s'); 
$diff = ($date < 30) ? 1800 - (($date * 60) + $sec) : 3600 - (($date * 60) + $sec); //set diff to run split on the half hour. 
$hld_diff = $diff; 

は分の数がより少ない場合、次の行が言っている

$date = date('i') //is taking the minutes portion of the current time 
$sec = date('s') //is taking the seconds portion of the current time 

です30の場合、$ diffを1800秒(つまり30分)から現在の分と秒を引いた値に設定します。言い換えれば、現在の時刻が00分00秒に達するまで$ diff値を秒数に設定します。分数が30以上の場合は、同様のことを行いますが、現在の分と秒がそれぞれ30と0になるまで$ diffに分と秒を設定します。

この同じコードを使用したいのに10分に設定したい場合は、まずクロックの何分分をカウントダウンするかを決めなければなりません。簡単にするため、0,10,20,30,40、および50で終了するとします。

したがって、あなたがこのような何か行うことができます:(私は何かを見落としていない限り)あなたが必要とするすべてである必要があり

if($date < 10) 
    $diff = 600 - (($date * 60) + $sec); 
else if($date < 20) 
    $diff = 1200 - (($date * 60) + $sec); 
else if($date < 30) 
    $diff = 1800 - (($date * 60) + $sec); 
else if($date < 40) 
    $diff = 2400 - (($date * 60) + $sec); 
else if($date < 50) 
    $diff = 3000 - (($date * 60) + $sec); 
else 
    $diff = 3600 - (($date * 60) + $sec); 

+0

それは働く:)タイマーは10分にダウンして、私は病気が上記のスクリプトタイマーを変更する必要があると思う。ありがとうございました。 – user631756

+0

@ user631756なぜこれは受け入れられませんでしたか? – TheOx

+0

私の謝罪、私はそれをマークするのを忘れました。上記はうまくいきます。 – user631756

3

あなたが望むように思えるのは、cron jobです。予め定義された時間または間隔でスクリプトを実行することができる。 cronの設定は、それを実行しているサーバー環境に少し依存します。 JavaScriptでカウントダウンスクリプトを使用して更新する


var count = 600; 

function hitPhpScript() { 
    var xhr = new XMLHttpRequest(); 
    xhr.open("get", "myscript.php", true); 
    xhr.send(null); 
    startCountdown(); 
} 

function startCountdown() { 
    count = 600; 
    doCountdown(); 
} 

function doCountdown() { 
    count--; 

    if (count > 0) { 
     document.getElementById("countdown_label").innerHTML = count + " seconds left"; 
     setTimeout("doCountdown()", 1000); 
    } else { 
     hitPhpScript(); 
    } 
} 
+0

私は現在cronを使用しています。私は視覚的なカウントダウンを必要とし、おそらくいくつかのクーロンスポットを解放する。 – user631756

+0

その場合、JavaScriptの 'setTimeout'を600000(毎秒1000ミリ秒* 60秒間* 10分)の値に使用し、' XMLHttpRequest'を使用してPHPスクリプトにヒットする関数を呼び出すことができます。しかし、これは、クライアントがPHPスクリプトを手動で呼び出すことができることを意味します。クライアントが存在しない場合、スクリプトは10分ごとに呼び出される頻度が少なくなります。 UIをより頻繁に更新したい場合は、 'timeout'値を減らすことができます。 –

+0

@ user631756:可能な解決策で回答を更新しました。 –

0

そのゲームのためのカウントダウン、私は現金または何がって追加されたときに視覚的なカウントダウンを必要とします。

通常、「実際の」カウントダウンを使用してこのスクリプトを作成しません。ロジックは、「非リアルタイム」の方法でプログラミングするのに十分単純です。次回ユーザーがログオン/ページの更新/何かを実行したときは、最後にページを見たときから受け取ったはずの金額をユーザーに提供するのに必要なすべての計算を実行できます。あなたは実際に10分後に正確にユーザーにお金を与える必要はありません。

このようなゲームでは、通常、1分ごとに実行されるcronジョブ/デーモンがあり、このようにすべてのユーザーのすべての量を再計算します。視覚的なカウントダウンはクライアント側の仕組みに過ぎません。

+0

は、cronスポットから逃げ出しています。笑、これはなぜこれに頼っているのですか。 – user631756

+0

これは、毎回cronジョブを実行する必要がない方法でこれをスクリプト化する理由です。誰も1週間サーバーとやり取りしない場合、サーバーは1週間何もしません。ユーザーがサーバーの使用を再開すると、サーバーは個々の計算をすべて実行します。それだけです。一般的なcronジョブを使用して定期的に追いつくだけで、最新の状態を維持し、ユーザーが経験する可能性のある初期遅延を最小限に抑え、サーバー*が時間のかかる処理(送信など)を引き起こします電子メール通知)。 – deceze

関連する問題