Foros del Web » Programando para Internet » PHP »

insertar dias de intervalo fechas uno a uno

Estas en el tema de insertar dias de intervalo fechas uno a uno en el foro de PHP en Foros del Web. Hola a todos. a ver si me podéis echar una mano con esto. tengo este problema. quiero insertar uno a uno los días de un ...
  #1 (permalink)  
Antiguo 22/01/2009, 05:49
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
insertar dias de intervalo fechas uno a uno

Hola a todos. a ver si me podéis echar una mano con esto. tengo este problema. quiero insertar uno a uno los días de un intervalo de fecha en una tabla de una base de datos. es decir, lo que quiero hacer es lo siguiente:

supongamos que mediante formulario se envía el siguiente intervalo de fechas:

fecha1= 01/02/2009
fecha2= 05/02/2009

yo lo que quiero es que los dias de ese intervalo se inserten en una tabla de una base de datos. la tabla supongamos que se llama dias. en esa tabla por lo tanto deberían registrarse los siguientes días:

01/02/2009;
02/02/2009;
03/02/2009;
04/02/2009;
05/02/2009;

cómo puedo hacer esto? espero vuestra ayuda. gracias por todo.
__________________
desgraciadamente no conozco php ni la mitad de lo que lo conocen ustedes y eso es menos de la mitad de lo que yo querria y lo que yo querria es menos de la mitad de lo que la mitad de ustedes conocen
  #2 (permalink)  
Antiguo 22/01/2009, 07:07
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 9 meses
Puntos: 19
Respuesta: insertar dias de intervalo fechas uno a uno

es facil!.... (o sea, hacerlo asi medio a lo cabernicola! jajaj)

Código PHP:

//ESTA FUNCION ES PARA QUE LE AGREGUE UN CERO ADELANTE A LOS NUMEROS DEL BUCLE YA QUE NO TIENEN 0 (porque el 0 adelante no vale nada, eso se sabe jaja)

function addZero($numero) {
    if( 
$numero 10 ) {
        return 
"0".round($numero);
    }
    return 
$numero;
}

//aca tenemos tus fechas iniciales

$fecha_inicial "01/02/2009";
$fecha_final "05/02/2009";

//ahora tomamos con respecto a ese formato de fecha, los dias
$dia_inicial substr($fecha_inicial 02);
$dia_final substr($fecha_final 02);


//y ahora solamente escribimos los dias
for($dia $dia_inicial$dia<=$dia_final$dia++)
{
    echo 
"Dia: " addZero$dia ) . "<br />";

  #3 (permalink)  
Antiguo 22/01/2009, 09:11
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Respuesta: insertar dias de intervalo fechas uno a uno

no...ese sistema falla. si ponemos por ejemplo del 28/02/2009 al 04/03/2009 no va para nada.

yo he avanzado algo pero me atasco. a ver. os cuento.

supongamos que recibo via formulario la fecha de entrada y la fecha de salida de tal modo que esas fechas las recojo en dos variables:

$fechaen
$fechasal

ahora utilizo dos funciones para convertir el formato de fecha (que viene dd/mm/yy) al formato de las fechas en bd mysql (yy/mm/dd):

Código PHP:
///////////////Funcion convertir fecha de entrada/////////////////////
function fmysl($fechaen)

    
ereg"([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})"$fechaen$mifecha); 
    
$lafecha=$mifecha[3]."-".$mifecha[2]."-".$mifecha[1]; 
    return 
$lafecha
}
///////////////////////////////////////////////////////////////////////
///////////////Funcion convertir fecha de salida/////////////////////
function fmysla($fechasal)

    
ereg"([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})"$fechasal$mifecha); 
    
$lafechaa=$mifecha[3]."-".$mifecha[2]."-".$mifecha[1]; 
    return 
$lafechaa
}
/////////////////////////////////////////////////////////////////////// 
una vez las tengo convertidas, calculo la diferencia de dias que hay en ese intervalo (sin contar el ultimo dia de salida por ejemplo: del 01 de enero al 03 de enero habria dos dias, 01 de enero y 02 de enero porque el 03 de enero ya tiene lugar la salida.

entonces ejecuto esta funcion:
Código PHP:
////función para sacar el número de días de la reserva
$startDate fmysl($fechaen);
$endDate fmysl($fechasal);
list(
$year$month$day) = explode('-'$startDate);
$startDate mktime(000$month$day$year);
list(
$year$month$day) = explode('-'$endDate);
$endDate mktime(000$month$day$year);
$totalDays = ($endDate $startDate)/(60 60 24) ;

echo 
"<br>Los días de diferencia son: "$totalDays
echo 
"<br>"
conseguido esto ya tengo cuantos dias hay en el intervalo. ahora lo que deberia sacar es sumar esos dias a la fecha inicial para obtener un registro de cada dia. es decir, del 01 de enero al 05 de enero hay 4 dias. con lo cual tendriamos que meter en la base de datos el dia 01 de enero, el dia 02 de enero, el 03 de enero y el 04 de enero. como el 01 de enero es la fecha de entrada no haria falta calcular esa variable, ese registro. luego habria que meter el 02, el 03 y el 04, o sea, 3 dias mas, o sea la diferencia de dias (4) menos 1. como hago eso para ir sumando a la fecha de entrada, 01 de enero un dia mas y al resultado otro dia mas y al resultado otro dia mas (y asi cuantos sean necesario) hasta completar totalmente los registros, en este caso esos 3 dias?
__________________
desgraciadamente no conozco php ni la mitad de lo que lo conocen ustedes y eso es menos de la mitad de lo que yo querria y lo que yo querria es menos de la mitad de lo que la mitad de ustedes conocen
  #4 (permalink)  
Antiguo 22/01/2009, 09:18
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 9 meses
Puntos: 19
Respuesta: insertar dias de intervalo fechas uno a uno

jaja tenes razon como lo hice a las apuradas con tal de ayudar no habia pensado en eso jajaj! ahora me pongo a trabajar a ver que logro!
  #5 (permalink)  
Antiguo 22/01/2009, 10:17
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Respuesta: insertar dias de intervalo fechas uno a uno

ok. gracias por vuestra ayuda. yo sigo estudiando el tema pero por ahora no soy capaz....
__________________
desgraciadamente no conozco php ni la mitad de lo que lo conocen ustedes y eso es menos de la mitad de lo que yo querria y lo que yo querria es menos de la mitad de lo que la mitad de ustedes conocen
  #6 (permalink)  
Antiguo 22/01/2009, 13:01
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Respuesta: insertar dias de intervalo fechas uno a uno

nada.....alguna idea?
__________________
desgraciadamente no conozco php ni la mitad de lo que lo conocen ustedes y eso es menos de la mitad de lo que yo querria y lo que yo querria es menos de la mitad de lo que la mitad de ustedes conocen
  #7 (permalink)  
Antiguo 23/01/2009, 00:58
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Respuesta: insertar dias de intervalo fechas uno a uno

ufff..... que jaleo...
__________________
desgraciadamente no conozco php ni la mitad de lo que lo conocen ustedes y eso es menos de la mitad de lo que yo querria y lo que yo querria es menos de la mitad de lo que la mitad de ustedes conocen
  #8 (permalink)  
Antiguo 23/01/2009, 11:58
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 9 meses
Puntos: 19
Respuesta: insertar dias de intervalo fechas uno a uno

Espera!!! ayer me fui a ver a Elton John y no tuve tiempo de ponerme a programar!
Código PHP:
$fecha_ini "01/02/2009";
$fecha_fin "05/02/2009";

$fecha_ini_array explode("/"$fecha_ini);
$fecha_fin_array explode("/"$fecha_fin);

$fecha_ini_marc mktime(000$fecha_ini_array[1], $fecha_ini_array[0], $fecha_ini_array[2]);
$fecha_fin_marc mktime(000$fecha_fin_array[1], $fecha_fin_array[0], $fecha_fin_array[2]);

$oneday = (60 60 24);

$cantidad_dias = ($fecha_fin_marc $fecha_ini_marc) / $oneday;

//Una vez que sacamos la cantidad de dias que tenemos entre las dos fechas
//hacemos un bucle que valla desde 1 hasta la cantidad de dias que 
//tenemos con el fin de generar esos dias qe necesitamos
//la variable $dias_de_adelanto se calcula multiplicando 1 dia por el valor de $i 
//que es el valor del dia actual en el que estamos
//Despues calculamos la fecha que es = a la fecha inicial mas los dias de adelanto
// o sea que si la fecha inicial es 01/02/2009 entonces al sumarle los dias de adelanto dara como resultado
//02 03 04 05 y asi susesivamente
//despues lo unico que se hace es imprimirla con el formato que querramos usando date()
for($i 1$i $cantidad_dias$i++) {
    
$dias_de_adelanto $oneday $i;
    
$fecha $fecha_ini_marc $dias_de_adelanto;
    echo 
date("d/m/Y"$fecha)."<br>";

espero que esto te ayude

Saludos
  #9 (permalink)  
Antiguo 27/01/2009, 01:37
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Respuesta: insertar dias de intervalo fechas uno a uno

disculpame que he estado enferma. me pongo a estudiar tu codigo y te cuento, ok? gracias por dedicar tu tiempo a mi problema
__________________
desgraciadamente no conozco php ni la mitad de lo que lo conocen ustedes y eso es menos de la mitad de lo que yo querria y lo que yo querria es menos de la mitad de lo que la mitad de ustedes conocen
  #10 (permalink)  
Antiguo 28/01/2009, 00:49
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Respuesta: insertar dias de intervalo fechas uno a uno

menudo trabajo has hecho....¡¡¡genial!!! lo he modificado pues yo necesitaba que me mostrara desde el mismo día que le pongo de fecha inicial. es decir, la herramienta la tenías de tal modo que si fecha_inic=28/01/2009 y fecha_fin=30/01/2009 entonces mostraba
29/01/2009

pero yo quería que también mostrara el mismo día de la fecha inicial, es decir, el 28/01/2009. lo he modificado aquí:

Código PHP:
for($i 1$i $cantidad_dias$i++) { 
en lugar de $i=1 he cambiado su valor mostrando $i=0 y ahora va correcto.

mi duda ahora es la siguiente:

en primer lugar, como guardo cada uno de esos valores obtenidos en una variable, y en segundo lugar, como meto esos valores en una tabla de la base de datos.

espero me puedas echar una mano tb.

gracias por todo
__________________
desgraciadamente no conozco php ni la mitad de lo que lo conocen ustedes y eso es menos de la mitad de lo que yo querria y lo que yo querria es menos de la mitad de lo que la mitad de ustedes conocen
  #11 (permalink)  
Antiguo 28/01/2009, 01:38
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Respuesta: insertar dias de intervalo fechas uno a uno

bueno pues lo que os digo. ahora trato de insertar los valores anteriores en una tabla de la base de datos.

tabla 'dias'

iddias-----autonumerico
dia------date

y qué hago?

pues esto:

Código PHP:
mysql_query("INSERT INTO dias(dia) VALUES($fecha)"); 
y qué me hace? pues supongamos este ejemplo:

fecha_inic: 28/01/2009
fecha_sal: 30/01/2009

días de diferencia: 2

resultado de la aplicación:
28/01/2009
29/01/2009
dias que habría que introducir: esos dos.

pues en la tabla me recoge dos registros pero el valor del campo día es 0000/00/00 en ambos. es decir, recoge bien el número de días que hay que meter (en este caso son dos; si fueran tres, pues tres, etc...) pero el valor de esos días los mete 0000/00/00

alguna ayuda?
__________________
desgraciadamente no conozco php ni la mitad de lo que lo conocen ustedes y eso es menos de la mitad de lo que yo querria y lo que yo querria es menos de la mitad de lo que la mitad de ustedes conocen
  #12 (permalink)  
Antiguo 28/01/2009, 04:02
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Respuesta: insertar dias de intervalo fechas uno a uno

jo por qué por quéeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
__________________
desgraciadamente no conozco php ni la mitad de lo que lo conocen ustedes y eso es menos de la mitad de lo que yo querria y lo que yo querria es menos de la mitad de lo que la mitad de ustedes conocen
  #13 (permalink)  
Antiguo 28/01/2009, 04:08
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 19 años, 5 meses
Puntos: 48
Respuesta: insertar dias de intervalo fechas uno a uno

2 cosas:

- Los valores de date los tienes que meter con comillas:

mysql_query("INSERT INTO dias(dia) VALUES('$fecha')");

- Haz un echo $fecha para comprobar que tiene el valor correcto.
  #14 (permalink)  
Antiguo 28/01/2009, 06:33
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Respuesta: insertar dias de intervalo fechas uno a uno

claro...el echo lo tienes aquí

Código PHP:
echo date("d/m/Y"$fecha)."<br>"
en el código está pero no...no va por ahí...sigue con 0000/00/00
__________________
desgraciadamente no conozco php ni la mitad de lo que lo conocen ustedes y eso es menos de la mitad de lo que yo querria y lo que yo querria es menos de la mitad de lo que la mitad de ustedes conocen
  #15 (permalink)  
Antiguo 28/01/2009, 07:32
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 9 meses
Puntos: 19
Respuesta: insertar dias de intervalo fechas uno a uno

jaja, sabes cual es tu problema???

$fecha contiene la marca de tiempo unix!....

vos tendrias que hacer esto!... (si estas trabajando con mysql)

Código PHP:
$fecha_mysql date("Y-m-d"$fecha);  //transformamos la marca de tiempo unix en el formato de fecha que querramos

mysql_query("INSERT INTO dias (dia) VALUES('$fecha_mysql');");  //lo guardamos 
  #16 (permalink)  
Antiguo 29/01/2009, 01:40
Avatar de estibaliz2006  
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Respuesta: insertar dias de intervalo fechas uno a uno

hola de nuevo....yo lo hacía así pero tb me da validez tu opción:

function fmysl($fechaen)
{
ereg( "([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})", $fechaen, $mifecha);
$lafecha=$mifecha[3]."-".$mifecha[2]."-".$mifecha[1];
return $lafecha;
}

y luego metía la fecha.
gracias por todo...:corazo n:
__________________
desgraciadamente no conozco php ni la mitad de lo que lo conocen ustedes y eso es menos de la mitad de lo que yo querria y lo que yo querria es menos de la mitad de lo que la mitad de ustedes conocen
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 08:43.