Foros del Web » Programando para Internet » PHP »

obtener fechas entre dos fechas dadas

Estas en el tema de obtener fechas entre dos fechas dadas en el foro de PHP en Foros del Web. Hola, no sé que hago mal, pero no consigo obtener las fechas que hay entre dos fechas, es para meter despues las fechas en la ...
  #1 (permalink)  
Antiguo 15/12/2011, 04:22
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
obtener fechas entre dos fechas dadas

Hola, no sé que hago mal,
pero no consigo obtener las fechas que hay entre dos fechas,
es para meter despues las fechas en la base de datos.
Todo lo que encuentro en google, o me da error, o una una pagina en blanco al hacer un echo, un cable please.
Gracias.
  #2 (permalink)  
Antiguo 15/12/2011, 05:03
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: obtener fechas entre dos fechas dadas

¿Qué has intentado hasta ahora? :)
__________________
>> Eleazan's Source
>> @Eleazan
  #3 (permalink)  
Antiguo 15/12/2011, 06:10
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
Respuesta: obtener fechas entre dos fechas dadas

He probado con todo, declara la fecha dentro de la funcion y fuera etc,
lo de funciones no lo conozco:
<?php
/**
* Returns an array with the dates between to dates given.
*
* @link http://us3.php.net/manual/en/function.date.php#AEN25217
*
* @param mixed $startdate Timestamp or strtotime() recognizeable string
* @param mixed $enddate Timestamp or strtotime() recognizeable string
* @param string[optional] $format date() format string
* @return mixed Array of timestamps or dates if given format
*/

function dates_between($startdate, $enddate, $format=null){
$startdate = 2012-01-01;
$enddate = 2012-12-31;
(is_int($startdate)) ? 1 : $startdate = strtotime($startdate);
(is_int($enddate)) ? 1 : $enddate = strtotime($enddate);

if($startdate > $enddate){
return false; //The end date is before start date
}

while($startdate < $enddate){
$arr[] = ($format) ? date($format, $startdate) : $startdate;
$startdate += 86400;
}
$arr[] = ($format) ? date($format, $enddate) : $enddate;

return $arr;
echo "$arr";

}
echo "$arr";
?>
  #4 (permalink)  
Antiguo 15/12/2011, 06:20
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: obtener fechas entre dos fechas dadas

Código PHP:
<?php
/**
* Returns an array with the dates between to dates given.
*
* @link http://us3.php.net/manual/en/function.date.php#AEN25217
*
* @param mixed $startdate Timestamp or strtotime() recognizeable string
* @param mixed $enddate Timestamp or strtotime() recognizeable string
* @param string[optional] $format date() format string
* @return mixed Array of timestamps or dates if given format
*/

function dates_between($startdate$enddate$format=null){
(
is_int($startdate)) ? $startdate strtotime($startdate);
(
is_int($enddate)) ? $enddate strtotime($enddate);

if(
$startdate $enddate){
return 
false//The end date is before start date
}

while(
$startdate $enddate){
$arr[] = ($format) ? date($format$startdate) : $startdate;
$startdate += 86400;
}
$arr[] = ($format) ? date($format$enddate) : $enddate;

return 
$arr;


}
$fecha1 now();
$fecha2 now()+7*86400//Una semana

$data dates_between($fecha1$fecha2'Y-m-d');
foreach (
$data as $date) echo $date.'<br>';
?>
Supongo que se usará algo así ;)
__________________
>> Eleazan's Source
>> @Eleazan
  #5 (permalink)  
Antiguo 15/12/2011, 06:39
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
Respuesta: obtener fechas entre dos fechas dadas

Gracias,
Lo he subido sin cambiar nada y da error:
Fatal error: Call to undefined function now() in /home/javiercd/public_html/base/adm/test.php on line 31
Y si cambio el now por una fecha una fecha que es lo que realmente quiero, elegir startdate y endate en un formulario me da este error:
Warning: Invalid argument supplied for foreach() in /home/javiercd/public_html/base/adm/test.php on line 35 :(
  #6 (permalink)  
Antiguo 15/12/2011, 06:42
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: obtener fechas entre dos fechas dadas

Perdon... en vez de "now()" era "time()". Me confundí con SQL xD

Puedes ponerlo así si prefieres:

Código PHP:
$fecha1 '2011-12-01';
$fecha2 '2011-12-07'
__________________
>> Eleazan's Source
>> @Eleazan
  #7 (permalink)  
Antiguo 15/12/2011, 06:54
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
Respuesta: obtener fechas entre dos fechas dadas

Ahora si iba, creia que los numeros iban sin la comilla,
muchas gracias
  #8 (permalink)  
Antiguo 15/12/2011, 08:36
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: obtener fechas entre dos fechas dadas

Otra forma de hacerlo
Código PHP:
Ver original
  1. <?php
  2. $start = new DateTime('2011-12-15');
  3. $end = new DateTime('2011-12-30');
  4. while(true){
  5.     echo $start->format('Y-m-d') . '<br />';
  6.     $start->add(new DateInterval('P1D'));
  7.     if($start->getTimestamp() > $end->getTimestamp()){
  8.         break;
  9.     }
  10. }
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #9 (permalink)  
Antiguo 15/12/2011, 11:21
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
Respuesta: obtener fechas entre dos fechas dadas

Segundo problema, Como puedo insertar las fecha en mysql, tal como esta no inserta nada, he leido que hay que usar implode y algunos dicen tambien explode,
Conjuntamente con las fechas me gustaria insertar otro valor.

Gracias abimaelrc, no se si es mejor o no, lo he probado y da la fecha start y el error:
Fatal error: Call to undefined method DateTime::add() in /home/javiercd/public_html/base/adm/test3.php on line 7
  #10 (permalink)  
Antiguo 15/12/2011, 11:50
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
Respuesta: obtener fechas entre dos fechas dadas

Rectifico,
Con este codigo inserta la ultima fecha del array
es decir 31/12

Código:
<?php
include("conex/conexion.php");
function dates_between($startdate, $enddate, $format=null){
(is_int($startdate)) ? 1 : $startdate = strtotime($startdate);
(is_int($enddate)) ? 1 : $enddate = strtotime($enddate);

if($startdate > $enddate){
return false; //The end date is before start date
}
while($startdate < $enddate){
$arr[] = ($format) ? date($format, $startdate) : $startdate;
$startdate += 86400;
}
$arr[] = ($format) ? date($format, $enddate) : $enddate;

return $arr;


}
$fecha1 = '2011-01-01';
$fecha2 = '2011-12-31'; 

$data = dates_between($fecha1, $fecha2, 'Y-m-d');
foreach ($data as $date) ;{
$query = "insert into calendar_table (cal_date)" . 
"VALUES ('$date')";
$result = mysql_query($query) or die(mysql_error());}
?>
gracias

pd. Serialize no me valen, ya que quiero cada fecha en una fila distinta en mysql

Última edición por helenp; 15/12/2011 a las 12:04
  #11 (permalink)  
Antiguo 15/12/2011, 12:12
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: obtener fechas entre dos fechas dadas

Tienes un ; malvado delante del { del foreach
__________________
>> Eleazan's Source
>> @Eleazan
  #12 (permalink)  
Antiguo 15/12/2011, 13:11
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
Respuesta: obtener fechas entre dos fechas dadas

Cita:
Iniciado por Eleazan Ver Mensaje
Tienes un ; malvado delante del { del foreach
Lol, gracias, creia que era algo mas complicado, va de maravilla, monton de gracias.
  #13 (permalink)  
Antiguo 16/12/2011, 07:39
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
Respuesta: obtener fechas entre dos fechas dadas

lol, he pensado mal y no puedo borrar el post
  #14 (permalink)  
Antiguo 12/01/2012, 04:47
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
Respuesta: obtener fechas entre dos fechas dadas

Hi again,
Thanks Eleazan for this script that works perfect:
Código:
function dates_between($startdate, $enddate, $format=null){
(is_int($startdate)) ? 1 : $startdate = strtotime($startdate);
(is_int($enddate)) ? 1 : $enddate = strtotime($enddate);

if($startdate > $enddate){
return false; //The end date is before start date
}
while($startdate < $enddate){
$arr[] = ($format) ? date($format, $startdate) : $startdate;
$startdate += 86400;
}
$arr[] = ($format) ? date($format, $enddate) : $enddate;

return $arr;


}
$fecha1 = $llegada;
$fecha2 = $salida; 

$data = dates_between($fecha1, $fecha2, 'Y-m-d');
foreach ($data as $date) {
$query = "insert into calendar_table (cal_date, property)" . 
"VALUES ('$date', '$propiedad')";
$result = mysql_query($query) or die(mysql_error());}
header ("Location: insertar_calculadora.php"); 
}
Lo estoy usando, pero quiero hacer otra cosa,
la fecha startdate = $fecha1 en vez de manualmente poner la fecha me gustaria poner automaticamente la fecha del primer dia del presente año, o sea sería algo asi Y-01-01
asi siempre introduciria fechas del presente año.
Según este script tendría que cambiar las variables:
$fecha1 = $llegada;
$fecha2 = $salida;
por este resultado, donde el Y = year(now)
$fecha1 = Y-01-01;
$fecha2 = 2032-12-31;
Gracias
  #15 (permalink)  
Antiguo 12/01/2012, 05:12
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: obtener fechas entre dos fechas dadas

Sería algo así

Código PHP:
...
$fecha1 date('Y'); //Con esto, obtenemos el año en curso!
$fecha1 .= '-01-01'//Añadimos el mes (enero) y el dia (el 1);
... 
__________________
>> Eleazan's Source
>> @Eleazan
  #16 (permalink)  
Antiguo 12/01/2012, 06:37
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
Respuesta: obtener fechas entre dos fechas dadas

Cita:
Iniciado por Eleazan Ver Mensaje
Sería algo así

Código PHP:
...
$fecha1 date('Y'); //Con esto, obtenemos el año en curso!
$fecha1 .= '-01-01'//Añadimos el mes (enero) y el dia (el 1);
... 
Eso funcionó perfectamente, gracias de nuevo
  #17 (permalink)  
Antiguo 18/01/2012, 14:26
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
Respuesta: obtener fechas entre dos fechas dadas

Hola de nuevo,
Estoy intentando mejorar el script, pienso que debo calcular semana santa y de momento intento sacar el domingo de ramos usando easter_date.
Y lo he intentado meter dentro de la funcion para obtener el domingo de ramos de los 20 años que da la funcion.
De momento tengo esto:

$data = dates_between($fecha1, $fecha2, 'Y-m-d');
foreach ($data as $date)
echo "$date";
$santa = easter_date($date);
foreach ($santa as $santa2)
echo "$santa2";

Etiquetas: Ninguno
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 18:24.