Recorrer un rango de fechas en php
Introducción
Recientemente para un proyecto, necesitaba recorrer un rango de fechas en php, para realizar una serie de comprobaciones cada día de ese rango.
Investigando a ver cómo se podía hacer de manera sencilla, encontré un método que puede resultarnos muy útil.
Como comentaba en un post para calcular dias entre dos fechas, lo primordial es realizar la conversion a timestamp.
Convertir fecha a timestamp
Lo primero es convertir la fecha a formato timestamp con la función strtotime:
echo strtotime("dd-mm-aaaa");
en la que debemos sustituir “dd-mm-aaaa” por la fecha a convertir.
Si queremos obtener el timestamp de ahora mismo, es tan simple como hacer
echo strtotime("now");
Como recorrer un rango de fechas
Se trata de utilizar un bucle for de toda la vida, pero haciendo una conversión de las fechas a timestamp. Además, incrementaremos la variable en 86400 (el número de segundos de un día), de esta manera avanzamos día a día.
Por ejemplo, si queremos recorrer el rango de fechas del 25 de febrero de 2008 al 1 de abril de 2008, lo haríamos asi:
<?php $fechaInicio=strtotime("25-02-2008"); $fechaFin=strtotime("01-04-2008"); for($i=$fechaInicio; $i<=$fechaFin; $i+=86400){ echo date("d-m-Y", $i)."<br>"; } ?>
Con este método nos evitamos las comprobaciones por si es año bisiesto, numero de días por mes, etc. ¿Conocéis alguna otra manera de recorrer un rango de fechas que sea sencilla?. Si es así, dejar un mensaje, y así nos beneficiamos todos... ;D
Hola a ver si me podéis ayudar. Me gustaría hacer un recorrido por unas fechas y extraer que día de la semana es cada uno.
Tengo una fecha de entrada y una fecha de salida, ya se como sacar los días que hay entre uno y otro. Ahora me gustaría saber que día de la semana es cada uno.$fechaEntrada = new DateTime($_POST["fecha-entrada"]);
$fechaSalida = new DateTime($_POST["fecha-salida"]);
$diff = $fechaEntrada->diff($fechaSalida);
$dias = $diff->days;Este es mi código, que me devuelve en la variable $dias, la diferencia de días, ahora me gustaría saber que días son. Lunes, Martes......
Gracias
que podemos hacer con el cambio de horario????
mira mi codigo:
for($i=$fechaprimero;$i<=$fechaultimo;$i+=86400){
echo $i . " " . date("Y-d-m H:i:s",$i)." +++++ ";
}$fechaprimero es el 1 de noviembre de 2019
$fechaultimo es el 30 de noviembre de 2019el resultado es asi: (checa el 03 nov)
1572584400 2019-01-11 00:00:00 +++++
1572670800 2019-02-11 00:00:00 +++++
1572757200 2019-03-11 00:00:00 +++++
1572843600 2019-03-11 23:00:00 +++++
1572930000 2019-04-11 23:00:00 +++++
1573016400 2019-05-11 23:00:00 +++++
1573102800 2019-06-11 23:00:00 +++++
1573189200 2019-07-11 23:00:00 +++++
1573275600 2019-08-11 23:00:00 +++++
1573362000 2019-09-11 23:00:00 +++++y el resultado
OK para cambio de horario resta el día siguiente al día actual con strtotime() para tener siempre cuanto vale un día, de esta manera si cae el horario de verano entonces podrás tener el resultado correcto si un dia llegase a durar 23 hrs o 25 hrs en el inicio y fin del horario de verano. Bueno así lo resolví yo 😀
$tiempoInicio = strtotime($fechaInicio);
$tiempoFin = strtotime($fechaFin);$dia = 86400;
while($tiempoInicio <= $tiempoFin){$fechaActual = date("Y-m-d", $tiempoInicio);
$dia2 = strtotime($fechaActual. "+ 1 days");
$dia1 = strtotime($fechaActual);
$dia = $dia2 - $dia1 ;# Sumar el incremento para que en algún momento termine el ciclo
$tiempoInicio += $dia;
1/11/2019 0:00
Nacho mira este es el formato en el que tengo las fechas en excel y tengo asignado mi variable Fecha_inicio como un campo varchar
en mi base de datos.Tengo una pregunta,
lo que pasa es que estoy insertando las fechas que contiene un excel en mi base de datos pero al momento de subirlas me las subia como numero ejemplo 5643134 asi no mas, le inserte este codigo -> $Fecha_inicio = date("d/m/Y", (int)$numRows["topic_last_post_time "]);
pero lo que hace es insertarme la fecha 01/01/1970
en todos los campos que puedo hacer? gracias.Hola compadres tengo un problema similar pero la verdad nada de lo que e intentado funciona, Necesito un contador de días de fecha actual, me explico que comiense hoy y solo muestre 1 2 3 4 5 6 7 ps solo el numero de días que hayan trascurrido y que solo se reinicie a 1 si le doy reset con un boton, se podrá?
$fechaInicio1=strtotime($_REQUEST["fechaInicio"]);
$fechaFin1=strtotime(sumasdiasemana("$fecha1",$dias_practica));
for($i=$fechaInicio1; $i<=$fechaFin1; $i+=86400){
$fin = date("d-m-Y", $i)."<br>";if ($fin == date("01-01-2020")) {
$cont = $cont + 1;
echo "$cont";
}
}alguien que me ayude quiero, quiero que mi contador aumente cada vez que pasa por cierta fecha, pero no me da resultado no me incrementa el contador.
Alguien sabe porque las fechas se repiten despues del rango ? es decir si el rango de fecha inicia del 10 al 15 al terminar de imprimir esas fechas las vuelve a repetir
Como puedo implementar un buscador por fechas y por palabras, pero que busque en la misma lista que me encuentro y que no me busque en general.
yo ocupo.. que al momento de presionar un botón que diga 4 meses.. todas las personas que se registraron hace 4 meses aparezcan.. tendría que comparar la fecha actual y en automático la de hace 4 meses.. osea que se agrupen los registros... Como lo hago???? en PHP
esta de lujo me quitaste el dolor de cabeza... en verdad GRACIAS.....
Cómo puedo hacer para recorrer varios rangos al mismo tiempo?
Osea voy a extraerlos de una dB, pero las fecha van a estar saltando.
Pues tendrás que echar un vistazo a la documentación de hilos en php (http://php.net/manual/es/class.thread.php) para ir generando un hilo por cada consulta.
Tengo algo similar pero no tiene el problema del día final
<?php
$fechaInicio = "2014-02-01";
$fechaFin = "2014-03-31";
for($i=$fechaInicio; $i<=$fechaFin; $i = date("Y-m-d", strtotime($i ."+ 1 days"))){
echo date("d-m-Y", strtotime($i)) . "";
}
?>
Hola Felipe,
no se exactamente a que te refieres. ¿Hay algún problema en el código del post?
Excelente post, sencillo pero muy util, muchas gracias!
Hola issux gracias por responder, fíjate he cambiado los tipos de datos he hecho de todo pero no me funciona, no tengo mucha experiencia con el manejo de fechas y menos desde datepicker, necesito un poco más de ayuda a nivel de código. Gracias de antemano
Wao impresionante, me funciono muy bien, felicidades! Listo para implementarlo
Hola Issux estoy haciendo un sistema de reservas y quiero comparar dos rangos de fechas, una fecha_inicio y una fecha_fin para que cuando un rango de fechas reservadas le indique al cliente que ya están reservadas, ejemplo: si ya hay una reserva hecha desde el 12/06/2013 al 25/06/2013 que en ese rango de fechas no pueda reservar y el sistema le indique que están ocupadas he intendado de varias maneras y no he podido:
acá te dejo algo de lo que hecho a ver en que puedes ayudarme, gracias de antemano.
$sql=("SELECT * FROM reservacion_departamento WHERE fecha_inicio, fecha_fin BETWEEN 'dd/mm/aa' AND 'dd/mm/aa';");
$consulta=mysql_query($sql,$conexion);
while($resultado=mysql_fetch_array($consulta)){
if (($fecha_inicio) <= ($resultado['fecha_inicio']))
$flag = 1;
else
$flag = 0;
}
if ($flag == 1){
echo ("
alert ('fecha no disponible...')
");
}
else
{
echo ("
alert ('Fechas disponibles, reserve ahora...')
location.href = 'reserva_departamento.php';
");
}
}//Fin consultarHola Andrés,
El problema tiene toda la pinta de ser por el tipo de dato de la bd, que supongo que debe ser un date y las comparaciones que se hacen. Cambiaría el tipo de dato de la tabla por un timestamp, y de esta manera las comparaciones no me darían problemas. Puedes utilizar el método strtotime() para convertir a timestamp la fecha, y revisa la pagina http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html para las funciones de conversión de fechas de mysql.
Saludos.
hola disculpa si pudiste resolver ese problema??
Alguien sabe como hacer eso mismo en Javascript. Estoy implementando un calendario de disponibilidad, el cual paso las fechas a un script de JS y el formato de fecha es el siguiente ['2017-03-02'] osea Y-m-d pero cuando le paso estos datos el calendario solo me muestra la ultima fecha en rojo, y omite las demas.
pero si hago un echo con php me sale lo que quiero, pero no he podido combinarlos con JS.
Alguien puede ayudarme por favor, mis conocimientos de JS son muy muy básicos.Echale un vistazo a este posts de StackOverflow (http://stackoverflow.com/questions/1791895/converting-date-and-time-to-unix-timestamp) para convertir fechas a formato unix timestamp.
Deja una respuesta
Una solución muy útil.