Foros del Web » Programando para Internet » Javascript »

sincronizar reloj y php

Estas en el tema de sincronizar reloj y php en el foro de Javascript en Foros del Web. Buenas amigos tengo un pequeño gran problema en caso es que he creado un tienda con un cuanta atras el tiempo que tiene que estar ...
  #1 (permalink)  
Antiguo 15/03/2012, 14:44
Avatar de Lynxcraft  
Fecha de Ingreso: noviembre-2007
Ubicación: yecla murcia
Mensajes: 1.346
Antigüedad: 16 años, 5 meses
Puntos: 51
sincronizar reloj y php

Buenas amigos tengo un pequeño gran problema en caso es que he creado un tienda con un cuanta atras el tiempo que tiene que estar un carrito de compra el problema es que tiene que ser de 15 minutos he colocado ese tiempo en un base de datos y un java script que controla el cuanta atras si llega a cero envia una solicitud para eliminar

Código:

function timeresetcar(ayo,mes,dia,hora,minuto,segundo) {
	var nt={
		ayo:0,
		mes:0,
		dia:0,
		hora:0,
		minuto:0,
		segundo:0
	}
	
	nt.dia= dia;
	nt.hora= hora;
	nt.minuto= minuto;
	nt.segundo= segundo;
		
	var a = new Date();
	var dif = new Date(ayo,mes - 1,dia,hora,minuto,segundo);
	dif = (dif.getTime() - a.getTime())/1000;
	if (dif < 0) { 
		$.ajax({
		  url: "<?php echo _URL::_('shop/reset/'. $this->cfxParam['cart']['code_user']);?>",
		}).done(function(){
			$('.carttimemsn').html('Tu cesta ha caducado');
			cfx.swin( '<div class="box info">Tu cesta ha caducado</div>');
			$('#swin_b').click(function(){
				location.href = "<?php echo _URL::_('shop/cart/');?>";
			});
			$('#swin_t').click(function(){
				location.href = "<?php echo _URL::_('shop/cart/');?>";
			});
			setTimeout(function(){
				location.href = "<?php echo _URL::_('shop/cart/');?>";
			},5000);
		});
		
	}else{
		
	
		nt.dia= Math.floor(dif/60/60/24);
		nt.hora= Math.floor((dif - nt.dia*60*60*24)/60/60);
		nt.minuto= Math.floor((dif - nt.dia*60*60*24 - nt.hora*60*60)/60);
		nt.segundo= Math.floor(dif - nt.dia*60*60*24 - nt.hora*60*60 - nt.minuto*60);
		
		var sminuto='00';
		var ssegundo='00';

		if (nt.dia > 0) {
			
		}
		if (nt.hora > 0 || nt.dia > 0) {
			
		}
		if (nt.minuto > 0 || nt.hora > 0 || nt.dia > 0) {
			sminuto = ('0' + String(nt.minuto)).slice (-2);
		}
		
		ssegundo = ('0' + String(nt.segundo)).slice (-2);	
			
		$('.cartime .m').html(sminuto);	
		$('.cartime .s').html(ssegundo);	
		setTimeout(function(){
			timeresetcar(ayo, mes ,dia, hora, minuto, segundo );	
		},1000);
			
	}
	
}

var data_end='<?php echo $this->cfxParam['cart']['date_end'];?>';
data_end = data_end.split(' ');
time = data_end[1].split(':');
data = data_end[0].split('-');

var ayo = data[0];
var mes = data[1]; //1 = Enero
var dia = data[2];
var hora = time[0];
var minuto = time[1];
var segundo = time[2];
timeresetcar(ayo, mes ,dia, hora, minuto, segundo );	
</script>
el caso es que la fecha la la tomo del servidor y esta retrasado cuando el usuario entra automaticamente le dice que su carrito ha caducado
no se me ocurre nada para cronometrar el tiempo del servidor con la hora local de cada cliente gracias
__________________
Sobran las ideas cuando faltan ganas de trabajar en ellas
Lynxcraft
  #2 (permalink)  
Antiguo 15/03/2012, 15:21
Avatar de suap  
Fecha de Ingreso: julio-2009
Ubicación: La taberna de Moe's
Mensajes: 54
Antigüedad: 14 años, 10 meses
Puntos: 4
Respuesta: sincronizar reloj y php

porque simplemente no lo dejas asi, al momento de el usuario hacer alguna accion como guardar, salir de la pagina lo limpias...
__________________
Alan Carrillo
  #3 (permalink)  
Antiguo 15/03/2012, 15:21
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: sincronizar reloj y php

a ver si esto te ayuda en algo
Cita:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<head>
<meta http-equiv="Content-Type" content="application/xhtml; charset=utf-8" />
<title></title>
<style type="text/css">
#calContador {width:450px;}
#calFondoEnunciado {background-color:#6B8E23;color:#FFFFFF;font-family:Arial;font-size:12px;border: 1px solid #C9C9C9;border-width: 1px 1px 0px 1px;text-align:center;}
#calCuerpo td{background-color:#6B8E23;color:#FFFFFF;font-family:Arial;font-size:11px;font-weight:bold;text-align:center;}
#calCuerpo td.cont{background-color:#FFFF00;color:#000000;width:50px;}
</style>

<?php
$fecha = time();
?>

<script type="text/javascript">
function crono(){
var dia = <?php echo date('d', $fecha);?>, mes = <?php echo date('n', $fecha)-1;?>, anio = <?php echo date('Y', $fecha);?>, hora = <?php echo date('H', $fecha);?>, minutos = <?php echo date('i', $fecha)+1;?>
var fechaFinal = new Date(anio,mes,dia,hora,minutos)

var serv_ahora = new Date();
serv_ahora.getFullYear(<?php date('Y', $fecha);?>);
serv_ahora.getMonth(<?php echo date('n', $fecha);?>);
serv_ahora.getDate(<?php echo date('d', $fecha);?>);
serv_ahora.getHours(<?php echo date('H', $fecha);?>);
serv_ahora.getMinutes(<?php echo date('i', $fecha);?>);
diferencia = fechaFinal.getTime() - serv_ahora.getTime()

segundostotales = parseInt(diferencia /1000);
minutostotales = parseInt(segundostotales/60);
horastotales = parseInt(minutostotales/60);
dias = parseInt(horastotales/24);
horas = parseInt(horastotales % 24);
minutos = parseInt(minutostotales % 60);
segundos = parseInt(segundostotales % 60);

falta = '<div id="calContador"><div id="calFondoEnunciado">Tiempo que Falta hasta el ' + dia + '/' + parseInt(mes+1) + '/' + anio + ' ' + hora + ':' + minutos + '</div><div id="calCuerpo"><table style="table-layout:fixed;" bgcolor="#C9C9C9" border="0px" cellspacing="1px" cellspadding="0px" width="450px"><tr>';

if(dias < 10) {dias = '0' + dias;}
if(horas < 10) {horas = '0' + horas;}
if(minutos < 10) {minutos = '0' + minutos;}
if(segundos < 10) {segundos = '0' + segundos;}

diasTxt = '<td class="cont">' + dias + '</td><td>Días</td>';
horasTxt = '<td class="cont">' + horas + '</td><td>Horas</td>';
minutosTxt = '<td class="cont">' + minutos + '</td><td>Minutos</td>';
segundosTxt = '<td class="cont">' + segundos + '</td><td>Segundos</td></tr></table></div></div>';

if (Math.abs(diferencia) <= 900) {
contadorCompleto = falta + '<td class="cont">Se ha cumplido el tiempo</td></tr></table></div></div>';
clearTimeout(intervalo);
}
else
{
contadorCompleto = falta + diasTxt + horasTxt + minutosTxt + segundosTxt
intervalo = setTimeout("crono(), 1000");
}
document.getElementById('contador_regresivo').inne rHTML = contadorCompleto;
}
window.onload=function(){crono();};
</script>
</head>
<body>
<div id="contador_regresivo" style="text-align:center"></div>
</body>
</html>
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #4 (permalink)  
Antiguo 16/03/2012, 11:48
Avatar de Lynxcraft  
Fecha de Ingreso: noviembre-2007
Ubicación: yecla murcia
Mensajes: 1.346
Antigüedad: 16 años, 5 meses
Puntos: 51
Respuesta: sincronizar reloj y php

muchas gracias por reponder IsaBelM tu codigo tiene muchos errores XD si lo esta utilizando tal cual seria mejor echarle un ojin por si acaso

bueno el caso que al final me sirvio de mucho y me dio una idea para evitar que el tiempo varie entre el servidor y usuario

Código PHP:
<a class="mado-cart<?php  echo $this->cfxParam['cant']?' add':'' ?>" href="<?php  echo _URL::_('shop/cart');?>">
<div class="tx">
<span>Carrito:</span>
<b>
<?php  echo $this->cfxParam['cant']; ?>
</b>
<? if( $this->cfxParam['cant'] ){ ?>
<span class="carttimemsn">
Tu cesta caduca en <b class="cartime"><span class="m">00</span>:<span class="s">00</span></b> min
</span>
<?php
$fecha 
strtotime($this->cfxParam['cart']['date_end']);
$fechaac strtotime(date('Y-m-d H:i:s'));

$retfech $fecha $fechaac;
?>

<script type="text/javascript">
var _ini_date="<?php echo $this->cfxParam['cart']['date_end'];?>";
var _ini_date2="<?php echo date('Y-m-d H:i:s');?>";
var _ini_count_cart=false;
var intervalo = null;
var milis='<?php echo $retfech;?>';
function crono(){
    
    
    var a = new Date();
    
    a.setMinutes((milis/60)%60)
    a.setSeconds(milis % 60);
    $('.cartime .m').html( ('0' + a.getMinutes() ).slice (-2));
    $('.cartime .s').html( ('0' + a.getSeconds() ).slice (-2));

    if (milis<=0) {
        if(intervalo)
        clearTimeout(intervalo);
        if(_ini_count_cart){
            
        $.ajax({
              url: "/",
            }).done(function(){
                $('.carttimemsn').html('Tu cesta ha caducado');
            });
        }
    }else{
        milis-=1;
        if(_ini_count_cart ) $('.carttimemsn').show();
        _ini_count_cart = true;    
        intervalo = setTimeout(function(){
            crono()
        },1000);
    }
}
crono();
</script>

<? ?>


</div>
<div class="icon"></div>

</a>
gracias por la ayuda XD
__________________
Sobran las ideas cuando faltan ganas de trabajar en ellas
Lynxcraft
  #5 (permalink)  
Antiguo 17/03/2012, 07:30
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: sincronizar reloj y php

por mas que lo he intentado no puede dejar de negar la mayor cuando dices "tu codigo tiene muchos errores XD"

hay que diferenciar entre errores en el código (cualquiera de las consolas te indicará que no tiene ninguno) y eficiencia del proceso (aquí se podría debatir unos cuantos aspectos). pero has de entender que ese código es simplemente un ejemplo con fines didácticos

jamás en mis 3 o 4 años en fdw he imprimido un código con errores que haga inviable su ejecución
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #6 (permalink)  
Antiguo 18/03/2012, 07:50
Avatar de Lynxcraft  
Fecha de Ingreso: noviembre-2007
Ubicación: yecla murcia
Mensajes: 1.346
Antigüedad: 16 años, 5 meses
Puntos: 51
Respuesta: sincronizar reloj y php

bueno se que no debo ser yo el que te muestre los siguientes errores (que creo yo que lo son )ya que fui el que abrió este tema solicitando ayuda y va parecer que voy de listo pero no es asi es que simplemente me gusta ayudar y a los que me ayudan pues mas

tu código funciona pero hay un par de cosillas mientras lo probaba que no me cuadraban en sintaxis por ejemplo
intervalo = setTimeout("crono(), 1000");
a mi parecer si quieres que se ejecute el código cada segundo seria así
intervalo = setTimeout("crono()", 1000);
que diferencia hay que la primera aun que no de error estas ejecutando a cada milisegundo la función crono, sin pausa y la segunda hace esperar 1 segundo antes de que se ejecute;

en este caso retrasas la fecha un mes
mes = <?php echo date('n', $fecha)-1;?>

y aqui sumas un minuto
minutos = <?php echo date('i', $fecha)+1;?>

supongo que es el minuto de espera .


en este caso

Código:
serv_ahora.getFullYear(<?php date('Y', $fecha);?>);
serv_ahora.getMonth(<?php echo date('n', $fecha);?>);
serv_ahora.getDate(<?php echo date('d', $fecha);?>);
serv_ahora.getHours(<?php echo date('H', $fecha);?>);
serv_ahora.getMinutes(<?php echo date('i', $fecha);?>);
si que me sorprendió ya que todas las funciones que empiezan por get son para solicitar valores no para darles por lo que su sintaxis seria

Código:
serv_ahora.setFullYear(<?php echo date('Y');?>);
serv_ahora.setMonth(<?php echo date('n');?>);
serv_ahora.setDate(<?php echo date('d');?>);
serv_ahora.setHours(<?php echo date('H');?>);
serv_ahora.setMinutes(<?php echo date('i');?>);
probando tu código seria asi

Código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<head>
<meta http-equiv="Content-Type" content="application/xhtml; charset=utf-8" />
<title></title>
<style type="text/css">
#calContador {width:450px;}
#calFondoEnunciado {background-color:#6B8E23;color:#FFFFFF;font-family:Arial;font-size:12px;border: 1px solid #C9C9C9;border-width: 1px 1px 0px 1px;text-align:center;}
#calCuerpo td{background-color:#6B8E23;color:#FFFFFF;font-family:Arial;font-size:11px;font-weight:bold;text-align:center;}
#calCuerpo td.cont{background-color:#FFFF00;color:#000000;width:50px;}
</style>

<?php
$fecha = time();
$fecha = strtotime('2012-3-18 14:20:00');
?>

<script type="text/javascript">
var intervalo=null;
function crono(){
var dia = <?php echo date('d', $fecha);?>, mes = <?php echo date('n', $fecha);?>, anio = <?php echo date('Y', $fecha);?>, hora = <?php echo date('H', $fecha);?>, minutos = <?php echo date('i', $fecha);?>; 
var fechaFinal = new Date(anio,mes,dia,hora,minutos);

var serv_ahora = new Date();
serv_ahora.setFullYear(<?php echo date('Y');?>);
serv_ahora.setMonth(<?php echo date('n');?>);
serv_ahora.setDate(<?php echo date('d');?>);
serv_ahora.setHours(<?php echo date('H');?>);
serv_ahora.setMinutes(<?php echo date('i');?>);
diferencia = fechaFinal.getTime() - serv_ahora.getTime()

segundostotales = parseInt(diferencia /1000);
minutostotales = parseInt(segundostotales/60);
horastotales = parseInt(minutostotales/60);
dias = parseInt(horastotales/24);
horas = parseInt(horastotales % 24);
minutos = parseInt(minutostotales % 60);
segundos = parseInt(segundostotales % 60);

falta = '<div id="calContador"><div id="calFondoEnunciado">Tiempo que Falta hasta el ' + dia + '/' + parseInt(mes+1) + '/' + anio + ' ' + hora + ':' + minutos + '</div><div id="calCuerpo"><table style="table-layout:fixed;" bgcolor="#C9C9C9" border="0px" cellspacing="1px" cellspadding="0px" width="450px"><tr>';

if(dias < 10) {dias = '0' + dias;}
if(horas < 10) {horas = '0' + horas;}
if(minutos < 10) {minutos = '0' + minutos;}
if(segundos < 10) {segundos = '0' + segundos;}

diasTxt = '<td class="cont">' + dias + '</td><td>Días</td>';
horasTxt = '<td class="cont">' + horas + '</td><td>Horas</td>';
minutosTxt = '<td class="cont">' + minutos + '</td><td>Minutos</td>';
segundosTxt = '<td class="cont">' + segundos + '</td><td>Segundos</td></tr></table></div></div>';

if (diferencia <= 999) {
contadorCompleto = falta + '<td class="cont">Se ha cumplido el tiempo</td></tr></table></div></div>';
if(intervalo)
clearTimeout(intervalo);
}
else
{
contadorCompleto = falta + diasTxt + horasTxt + minutosTxt + segundosTxt
intervalo = setTimeout("crono()", 1000);
}
document.getElementById('contador_regresivo').innerHTML = contadorCompleto;
}
window.onload=function(){crono();};
</script>
</head>
<body>
<div id="contador_regresivo" style="text-align:center"></div>
</body>
</html>
con esto nos evitaríamos fallos entre fechas

Como ya he dicho antes tu código me ayudo muchísimo si el no abría terminado pero como he visto estas cosillas pues he pensado que en algún momento te podría estar fallando y no te estés dando cuenta, como bien dices los códigos con fines didácticos estas correcciones me parecen importantes, por si a otro le hace falta

Muchas gracias un abraso
__________________
Sobran las ideas cuando faltan ganas de trabajar en ellas
Lynxcraft

Última edición por Lynxcraft; 18/03/2012 a las 07:57
  #7 (permalink)  
Antiguo 19/03/2012, 15:07
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: sincronizar reloj y php

Cita:
Iniciado por Lynxcraft Ver Mensaje
tu código funciona pero hay un par de cosillas mientras lo probaba que no me cuadraban en sintaxis por ejemplo
intervalo = setTimeout("crono(), 1000");
a mi parecer si quieres que se ejecute el código cada segundo seria así
intervalo = setTimeout("crono()", 1000);
que diferencia hay que la primera aun que no de error estas ejecutando a cada milisegundo la función crono, sin pausa y la segunda hace esperar 1 segundo antes de que se ejecute;
de donde has obtenido esa información??

el primer argumento es una referencia a una función o un string a evaluar
https://developer.mozilla.org/en/DOM/window.setTimeout
Cita:
setTimeoutl('fnc()', 1000) // primer argumento como string. no recomendable
setTimeoutl('fnc(), 1000') // los dos argumentos como string. menos recomendable
setTimeoutl(fnc, 1000) // como referencia a función. recomendable
setTimeout(function() {fnc(param)}, 1000) // función con parámetro. recomendable

Cita:
Iniciado por Lynxcraft Ver Mensaje
en este caso retrasas la fecha un mes
mes = <?php echo date('n', $fecha)-1;?>
en javascript, enero es el mes 0, febrero el 1, etc....


Cita:
Iniciado por Lynxcraft Ver Mensaje
y aqui sumas un minuto
minutos = <?php echo date('i', $fecha)+1;?>

supongo que es el minuto de espera .
es la hora final

en cuanto a establecer u obtener, tienes razón. hay que establecer

se te han olvidada alguna otra cosa.
  • el posible problema que podemos tener con los octales (08, 09). habrá que convertirlo a base 10
    Cita:
    parseInt(valor, redix)
  • otro punto que se te ha escapado es que recursivamente se ejecuta código que sólo ha de ser ejecutado de entrada
  • se usa tabla
  • .....
como ya comenté anteriormente, es un código que cree hace casi 3 años para practicar. no era un código para implementarlo
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}

Etiquetas: ajax, html, php, reloj, sincronizar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:11.