Foros del Web » Programando para Internet » PHP »

Consulta con date()

Estas en el tema de Consulta con date() en el foro de PHP en Foros del Web. Buenas como les va. Aca ando con una consulta para ustedes. Estoy intentando crear un script que me devuelva lo siguiente. La idea del script ...
  #1 (permalink)  
Antiguo 20/02/2011, 17:15
 
Fecha de Ingreso: febrero-2011
Mensajes: 12
Antigüedad: 13 años, 10 meses
Puntos: 0
Consulta con date()

Buenas como les va.

Aca ando con una consulta para ustedes.

Estoy intentando crear un script que me devuelva lo siguiente.

La idea del script es que por ejemplo:

X: "13-02-2011 - 03:51:00"

Teniendo esta fecha y hora X necesito que PHP consulte si es menor o mayor que el dia y hora actual, si la hora actual aun no alcanza a X que se muestre X, pero si la hora actual es superior a necesito X necesito que PHP le sume 37 horas a X y muestre el resultado de X + 37 horas y asi sucesibamente sin tener que crear un script cada 37 horas.

Adjunto lo que hice yo para ver si alguno de ustedes me puede dar una mano.

Código:
<?php

$fecha = "13-02-2011 03:51:00 ";
$fecha_en_formato_unix = strtotime($fecha);
$proximo_dia1 = $fecha_en_formato_unix + 3600*37; 
$proximo_dia2 = $fecha_en_formato_unix + 3600*74; 
$proximo_dia3 = $fecha_en_formato_unix + 3600*111; 
$proximo_dia4 = $fecha_en_formato_unix + 3600*148; 
$proximo_dia5 = $fecha_en_formato_unix + 3600*185; 
$proximo_dia6 = $fecha_en_formato_unix + 3600*222; 
$proximo_dia7 = $fecha_en_formato_unix + 3600*259; 
$proximo_dia8 = $fecha_en_formato_unix + 3600*296; 
$proximo_dia9 = $fecha_en_formato_unix + 3600*333; 
$proximo_dia10 = $fecha_en_formato_unix + 3600*370; 
$proximo_dia11 = $fecha_en_formato_unix + 3600*407; 
$proximo_dia12 = $fecha_en_formato_unix + 3600*444; 
$proximo_dia13 = $fecha_en_formato_unix + 3600*481; 
$proximo_dia14 = $fecha_en_formato_unix + 3600*518; 
$proximo_dia15 = $fecha_en_formato_unix + 3600*555; 

$a0 = "13-02-2011 - 03:51:00"; // 0
$a1 = "14-02-2011 - 16:51:00"; // 1
$a2 = "16-02-2011 - 05:51:00"; // 2
$a3 = "17-02-2011 - 18:51:00"; // 3
$a4 = "19-02-2011 - 07:51:00"; // 4
$a5 = "20-02-2011 - 19:51:00"; // 5
$a6 = "22-02-2011 - 08:51:00"; // 6
$a7 = "23-02-2011 - 21:51:00"; // 7
$a8 = "25-02-2011 - 10:51:00"; // 8
$a9 = "26-02-2011 - 23:51:00"; // 9
$a10 = "28-02-2011 - 12:51:00"; // 10
$a11 = "02-03-2011 - 01:51:00"; // 11
$a12 = "03-03-2011 - 14:51:00"; // 12
$a13 = "05-03-2011 - 03:51:00"; // 13
$a14 = "06-03-2011 - 16:51:00"; // 14
$a15 = "08-03-2011 - 05:51:00"; // 15


echo date("d-m-Y - H:i:s") ."<br>";

if (strtotime("now") > $proximo_dia1 && strtotime("now") < $proximo_dia2 ){
echo $a2;
}elseif (strtotime("now") > $proximo_dia2 && strtotime("now") < $proximo_dia3 ){
echo $a3;
}elseif (strtotime("now") > $proximo_dia3 && strtotime("now") < $proximo_dia4 ){
echo $a4;
}elseif (strtotime("now") > $proximo_dia4 && strtotime("now") < $proximo_dia5 ){
echo $a5;
}elseif (strtotime("now") > $proximo_dia5 && strtotime("now") < $proximo_dia6 ){
echo $a6;
}elseif (strtotime("now") > $proximo_dia6 && strtotime("now") < $proximo_dia7 ){
echo $a7;
}elseif (strtotime("now") > $proximo_dia7 && strtotime("now") < $proximo_dia8 ){
echo $a8;
}elseif (strtotime("now") > $proximo_dia8 && strtotime("now") < $proximo_dia9 ){
echo $a9;
}elseif (strtotime("now") > $proximo_dia9 && strtotime("now") < $proximo_dia10 ){
echo $a10;
}elseif (strtotime("now") > $proximo_dia10 && strtotime("now") < $proximo_dia11 ){
echo $a11;
}elseif (strtotime("now") > $proximo_dia11 && strtotime("now") < $proximo_dia12 ){
echo $a12;
}elseif (strtotime("now") > $proximo_dia12 && strtotime("now") < $proximo_dia13 ){
echo $a13;
}elseif (strtotime("now") > $proximo_dia13 && strtotime("now") < $proximo_dia14 ){
echo $a14;
}else{
echo $a15;
}
?>
  #2 (permalink)  
Antiguo 20/02/2011, 19:57
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 8 meses
Puntos: 1485
Respuesta: Consulta con date()

buenas...

si bien entiendo, lo que quieres mostrar son fechas programadas dentro de un rango. no se cual es la mejor manera de hacer eso en php. quizas la mejor opcion es almacenar la fecha limite en algun lugar (base datos o archivo) para no tener que calcularlo cada vez que lo muestres. es decir, lo calculas solo cuando sea necesario. de esta parte no puedo comentar porque aun no domino bien php y mucho menos base datos.

la otra forma es calculando las fechas a partir de la inicial. resta la fecha inicial con la actual y eso lo divides entre el rango (37 horas). ese resultado lo llevas al entero proximo (ceil). luego, multiplicas ese entero por el rango (37 horas) y se lo suma a la fecha inicial. eso te debe dar una fecha mayor a la actual.

ya se que este foro es php, pero muestro como lo hago en javascript. es cuestion de buscar el equivalente en php. o sea, para ti deberia ser casi un pseudocodigo.
Código:
var init = new Date(2011, 1, 13, 3, 51), today = new Date();
// nota: javascript trabaja a base de milisegundos ;
init.setHours(init.getHours()+ 37 * Math.ceil((today - init) / 133200000));
alert(today +" - "+ init);
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 20/02/2011 a las 20:11
  #3 (permalink)  
Antiguo 20/02/2011, 20:39
 
Fecha de Ingreso: febrero-2011
Mensajes: 12
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Consulta con date()

Cita:
Iniciado por zerokilled Ver Mensaje
buenas...

si bien entiendo, lo que quieres mostrar son fechas programadas dentro de un rango. no se cual es la mejor manera de hacer eso en php. quizas la mejor opcion es almacenar la fecha limite en algun lugar (base datos o archivo) para no tener que calcularlo cada vez que lo muestres. es decir, lo calculas solo cuando sea necesario. de esta parte no puedo comentar porque aun no domino bien php y mucho menos base datos.

la otra forma es calculando las fechas a partir de la inicial. resta la fecha inicial con la actual y eso lo divides entre el rango (37 horas). ese resultado lo llevas al entero proximo (ceil). luego, multiplicas ese entero por el rango (37 horas) y se lo suma a la fecha inicial. eso te debe dar una fecha mayor a la actual.

ya se que este foro es php, pero muestro como lo hago en javascript. es cuestion de buscar el equivalente en php. o sea, para ti deberia ser casi un pseudocodigo.
Código:
var init = new Date(2011, 1, 13, 3, 51), today = new Date();
// nota: javascript trabaja a base de milisegundos ;
init.setHours(init.getHours()+ 37 * Math.ceil((today - init) / 133200000));
alert(today +" - "+ init);
Muchas gracias por tu respuesta, voy a ver como hago para solucionarlo, probare tambien con la base de datos pero si alguien por ahi me da una mano le agradezco ya que no tengo mucha idea :(

Saludos.
  #4 (permalink)  
Antiguo 20/02/2011, 21:09
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 5 meses
Puntos: 416
Respuesta: Consulta con date()

Tu codigo redunda bastante y es MUY innecesario, la idea de la programacion es hacerte la vida mas facil, no complicartela.
Seria tan facil como:
Código PHP:
<?php
$x 
""//La fecha por defecto
$tx strtotime($x);
if(
time() > $tx) {
  echo 
date("Y-m-d H:i:s"$tx);
} else {
  echo 
date("Y-m-d H:i:s", ($tx + (37*3600)));
}
?>
  #5 (permalink)  
Antiguo 20/02/2011, 21:15
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 8 meses
Puntos: 1485
Respuesta: Consulta con date()

@ronruby,

no se si entendistes mejor que yo pero yo entendi que queria hacer lo siguiente...

Código PHP:
<?php
$today 
time();
$init strtotime('Feb 13, 2011 3:51:00');
$next $init ceil(($today $init) / 133200) * 133200;
echo 
date('M, d Y H:i:s'$today) .' - 'date('M, d Y H:i:s'$next);
?>
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #6 (permalink)  
Antiguo 20/02/2011, 21:19
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 5 meses
Puntos: 416
Respuesta: Consulta con date()

Cita:
@ronruby,

no se si entendistes mejor que yo pero yo entendi que queria hacer lo siguiente...
El que puede estar confundido soy yo :P A ver si no meti la pata
  #7 (permalink)  
Antiguo 20/02/2011, 21:50
 
Fecha de Ingreso: febrero-2011
Mensajes: 12
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Consulta con date()

Cita:
Iniciado por Ronruby Ver Mensaje
Tu codigo redunda bastante y es MUY innecesario, la idea de la programacion es hacerte la vida mas facil, no complicartela.
Seria tan facil como:
Código PHP:
<?php
$x 
""//La fecha por defecto
$tx strtotime($x);
if(
time() > $tx) {
  echo 
date("Y-m-d H:i:s"$tx);
} else {
  echo 
date("Y-m-d H:i:s", ($tx + (37*3600)));
}
?>
Muchas gracias pero este si bien es mucho mas corto daba el mismo resultado que el mio, pero lo que yo estaba buscando es justamente lo que publico zerokilled.

Nuevamente muchas gracias.

Cita:
Iniciado por zerokilled Ver Mensaje
@ronruby,

no se si entendistes mejor que yo pero yo entendi que queria hacer lo siguiente...

Código PHP:
<?php
$today 
time();
$init strtotime('Feb 13, 2011 3:51:00');
$next $init ceil(($today $init) / 133200) * 133200;
echo 
date('M, d Y H:i:s'$today) .' - 'date('M, d Y H:i:s'$next);
?>
Muchas gracias por tu ayuda, me sirvio de mucho y funciona de maravilla.

Gracias por todo nuevamente.

Saludos a los 2.

Etiquetas: date
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 16:58.