Hola, è un po che non passo di qui...
Allora, vediamo un po:
Per prima cosa devi settare il timeout credo che se arriva dal PHP lo scriverai direttamente con le funzioni lato server, giusto!?
Vediamo se riesco a fare qualcosa che ti vada bene:
<script>
/*
Questa funzione fa il controllo tra due date, passandogli la data di partenza e quella di arrivo ritorna un array contenente la differenza di giorni, ore, minuti, secondi e secondi globali
Se non si passa uno dei due parametri, la funzione prenderà la data attuale
es. distanza_tra_date('','2012,21,12,12,30,0');
Restituirà la differenza tra ora e la fine del mondo
*/
function distanza_tra_date(data_partenza,data_arrivo)
{
if(data_partenza=='')
{
tn = new Date();
timenow = new Array();
timenow['timestamp'] = tn.getTime()/1000;
}
else
{
data_partenza = data_partenza.split(',')
timenow['timestamp'] = new Date(Date.UTC(data_partenza[0],data_partenza[1],data_partenza[2],data_partenza[3],data_partenza[4],data_partenza[5],0))/1000;
}
if(data_arrivo=='')
{
tn = new Date();
timeout = new Array();
timeout['timestamp'] = tn.getTime()/1000;
}
else
{
timeout = new Array();
data_arrivo = data_arrivo.split(',')
timeout_timestamp = new Date(Date.UTC(data_arrivo[0],data_arrivo[1],data_arrivo[2],data_arrivo[3],data_arrivo[4],data_arrivo[5],0));
timeout['timestamp'] = (timeout_timestamp.getTime()/1000);
}
secondi_differenza = Math.ceil(timeout['timestamp']-timenow['timestamp']);
differenza = new Array();
differenza['secondi_globali'] = secondi_differenza;
differenza['g'] = Math.ceil(secondi_differenza/(60*60*24));
differenza['o'] = Math.ceil((secondi_differenza-(differenza['g']*(60*60*24)))/(60*60));
if(differenza['o']<0){differenza['o'] += 24; differenza['g']--;}
differenza['m'] = Math.ceil((secondi_differenza-((differenza['o']*(60*60))+(differenza['g']*(60*60*24))))/60);
if(differenza['m']<0){differenza['m'] += 60; differenza['o']--;}
differenza['s'] = Math.ceil(secondi_differenza-((differenza['m']*(60)+(differenza['o']*(60*60))+(differenza['g']*(60*60*24)))));
if(differenza['s']<0){differenza['s'] += 60; differenza['m']--;}
if(differenza['m']<0){differenza['m'] += 60; differenza['o']--;}
if(differenza['o']<0){differenza['o'] += 24; differenza['g']--;}
return differenza;
}
/*
Questa funzione è quella che controlla che la differenza tra le due date non sia minore/uguale a zero, in caso contrario disabilita il bottone, smette di richiamarsi e scrive un messaggio nel value del bottone
*/
function controllo_validita()
{
data_arrivo ='2012,12,21,12,30,0,0';
d = distanza_tra_date('',data_arrivo);
if(d['secondi_globali'] <= 0){ document.getElementById('pulsante').disabled = 'disabled'; document.getElementById('pulsante').value = 'Ora è tutto finito';}
else{ document.getElementById('pulsante').value = d['g']+' '+d['o']+':'+d['m']+':'+d['s']; st = setTimeout(controllo_validita,1000); }
}
</script>
<input type='submit' id="pulsante" />
<script>
//Faccio partire il countdown
controllo_validita();
</script>