Dudas en PHP

Hola de nuevo, estoy trabando en un sistema LAMP y la página trata sobre algo así como subastas, el problema es el siguiente, deseo tener una tabla con varios datos de nombre producto, uno de ellos quiero que sea de tipo fecha, y también deseo colocar en esa tabla un contador que se decremente conforma pase un día, dos días, es decir la tabla me servirá para almacenar los datos del producto y ahí debo colocar los días que estará a la venta, y pues el problema es que no se como hacer que los días se "decrementen" y que cuando se terminen todos los días se "borre" este registro.
Espero me haya explicado bien, agradecería mucho su respuesta y de antemano gracias.

1 respuesta

Respuesta
1
La mejor solución a tu problema es que el registro del objeto subastado disponga de un campo fecha que indica la caducidad. La página PHP que muestre la información del objeto puede hacer el cálculo de comparar la fecha actual con la de caducidad. Si la actual es mayor, significa que el objet ha caducado, y esto lo puedes reflejar en la página indicando que el producto ya no existe, por ejemplo. Si no ha caducado, puedes restar las fechas y así obtendrías el número exacto de días pendientes, sin necesidad de que se actualicen los registros de ninguna manera.
Restar fechas no es nada fácil si no lo has hecho nunca así que te explico cómo se haría en un ejemplo que trabaja con días y horas:minutos:segundos, para mayor precisión:
Para pasar a segundos absolutos la fecha de caducidad emplea la siguiente función:
// Se espera un formato tipo $datetime = "2001-02-24 21:21:00";
function datetime2segundos_f1($datetime) {
if (preg_match("/([0-9]{4})-([0-9]{1,2})-([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})/", $datetime, $parts)) {
$ano = $parts[1];
$mes = $parts[2];
$dia = $parts[3];
$hor = $parts[4];
$min = $parts[5];
$seg = $parts[6];
} else {
die("ERROR: Fecha no procesable: " . $datetime . "\n");
}
$segundos = GregorianToJD($mes,$dia,$ano) * 86400 + $hor * 3600 + $min * 60 + $seg;
return $segundos;
}
Para obtener la fecha actual en segundos, simplemente usa esta otra función: $timestamp = time();
Ahora ya puedes restarlos sin problemas. El resultado obtenido lo divides entre (3600*24) (el nº de segundos que tiene un día y obtienes en forma decimal el número de días pendientes, que puedes convertir a nº entero con la función intval() )
Una de las rutinas usa la función GregorianToJD, por lo que tu PHP lo tendrás que compilar con la opción
./configure --enable-calendar
Hola de nuevo, me pareció buena solución la que me diste, no obstante ahora tengo la siguiente pregunta, resulta que en el objeto producto tengo un campo llamado fecha actual que representa el día en que ese producto ha sido dado de alta, ademas el usuario puede escoger el numero de días que el producto estará en subasta (1 a 15), ahora mi pregunta es como sumarle a la fecha actual el numero de días para la obtener la fecha de caducidad y así poder hacer lo que me recomiendas.
Por otra parte, quisiera saber como declaro un campo tipo fecha en MySQL ¿es con date?, disculpa pero estoy empezando a usar MySQL y casi no encuentro tutoriales acerca de el.
Por ultimo, ya aprovechando la ocasión, quisiera que me recomendaras alguna dirección donde pueda obtener algún manual de informix ya que también tengo que usar una base de datos en informix pero la información de esto también escasea.
Agradezco de antemano tu respuesta, espero no molestarte con muchas preguntas pero no se a quien más acudir, y mi trabajo es para el próximo viernes, muchas gracias, saludos de un servidor:
Javier Davila
Sumar 15 días por ejemplo es tan sencillo como convertirlo a segundos y sumar:
Con datetime2segundos_f1() conviertes la fecha a segundos. A esta le sumas 15 * 3600 * 24, que son los segundos que hay en 15 días, y ya tienes la fecha de dentro de 15 días a partir de la fecha original en segundos. Si necesitas convertir a formato fecha esta cantidad, es también sencillo:
Suponiendo que $timestamp es el resultado de la suma:
$timearray = getdate($timestamp);
$fechahora_actual = sprintf("%04d-%02d-%02d %02d:%02d:%02d", $timearray["year"], $timearray["mon"], $timearray["mday"], $timearray["hours"], $timearray["minutes"], $timearray["seconds"]);
$fecha_actual = sprintf("%04d-%02d-%02d", $timearray["year"], $timearray["mon"], $timearray["mday"]);
Como ves puedes obtener la fecha y la hora, o sólo la fecha. Lo que quieras.
Tutoriales de MySQL: http://otri.us.es/recursosPHP/manual/sintaxis/tiempo_fecha.htm
http://otri.us.es/recursosPHP/manual/index.htm
Informix y PHP:
http://www.idei-unsj.com.ar/Cursos/Informix.html
http://www.rz.rwth-aachen.de/db/informix.php
Hola de nuevo, muchas gracias por aclararme mis dudas, en verdad que es muy buena la solución que me propones, ahora ya podre terminar mi proyecto a pronto, saludos y de nuevo gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas