PHP - Función suma días

 
Vista:

Función suma días

Publicado por Ensy (19 intervenciones) el 16/09/2009 11:00:09
Hola!!

Estoy intentando hacer una función que sume un número de días determinado a una fecha teniendo en cuenta si pilla bisiestos.

De todas las formas que he probado siempre me falla algo y estoy un poco saturada.

Si alguien tiene alguna y la compartiera conmigo se lo agradecería mucho!! Porque las que he encontrado por internet tampoco funcionan...

Un saludo y muchas gracias!!
Ensy
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Función suma días

Publicado por ambrosio (38 intervenciones) el 16/09/2009 11:40:00
Puedes hacerlo así:

$fecha = "2009-12-25";
$dias = 20;

$uts = strtotime ($fecha); // "Unix timestamp" de la fecha

$fecha_nueva = date ("Y-m-d", mktime (0, 0, 0, date ("m", $uts), date ("d", $uts) + $dias, date ("Y", $uts)));

echo $fecha_nueva;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Función suma días

Publicado por Ensy (19 intervenciones) el 16/09/2009 12:01:20
Este código no tiene en cuenta los bisiestos. Ejemplo:

04/11/2002 + 1096 =

Con tu código da 04/11/2005 y si tuviera en cuenta el 29/02/2004 daría 03/11/2005.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Función suma días

Publicado por Diego Romero (1450 intervenciones) el 17/09/2009 05:13:40
El código de Ensy anda perfecto.

Si tengo el 25/02/2009 y le sumo 10 días debo obtener el 07/03/2009 ¿cierto?.
El año 2008 fue bisiesto, entonces si tengo el 25/02/2008 y le sumo 10 días debo obtener el 06/03/2008, que es lo que obtengo con el código de Ensy.

Me parece que el problema que experimentas está en otra parte. Si el cálculo de fechas tuviera un bug tan evidente como el que dices ¿no crees que la comunidad de PHP de todo el mundo se habría dado cuenta de ello hace rato?. El cálculo de fechas se realiza usando la cantidad de segundos a partir de las 0:0:0 del 01/01/1970, al momento de escribir esto han transcurrido 1253156388 segundos desde ese momento (a ese número se le llama Unix Timestamp). ¿Cómo es posible que así se salteen un día? :P

Usando la fecha que propones, 04/11/2002 y sumando 1096 días da como resultado 04/11/2005, tú dices que debería ser 03/11/2005 porque no cuenta el 29 de febrero del 2004, ok, entonces si sumo entre años no bisiestos debería darme lo mismo, pruebo con 04/11/2004 y me da ¡05/11/2007!, lo cual es correcto porque entre las dos fechas no hay ningún 29 de febrero.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Función suma días

Publicado por ambrosio (38 intervenciones) el 17/09/2009 08:50:52
El código lo puse yo... Pero vamos que es de Ensy, tuyo y de todo el que lo quiera ;)

En todo lo demás estoy totalmente de acuerdo contigo. Pero vamos que no sé me ocurrió hacer pruebas con 1096 días...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Función suma días

Publicado por Diego Romero (1450 intervenciones) el 17/09/2009 20:29:32
Jajaja!, ok, ok. Te lo atribuí por error, quise decir ambrosio. Whatever.

Me alegra haber sido útil.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Función suma días

Publicado por Ensy (19 intervenciones) el 18/09/2009 10:28:59
Correcto chicos, tenéis toda la razón del mundo. Es que estaba un poco rayada ya con esto... os cuento:

Estoy sumando días trabajados y la fecha resultante tiene que ser el último día que se trabaja teniendo en cuenta el día inicial (04 de noviembre de 2002) que también se trabaja.

Si empiezas a trabajar el 04 de noviembre de 2002 y tienes un contrato de un año --> 04/11/2002 + 365 (ya que no es bisiesto, en caso de que pillara bisiesto se suman 366 y da el mismo resultado) = 03/11/2003 último día que trabajas. El nuevo contrato empezaría el 04/11/2003 en caso de que renueves.

El problema es que matemáticamente la función está correcta pero en la lógica no tiene en cuenta el día inicial, simplemente suma y yo quiero tener en cuenta ese día. La solución ha sido sumar matemáticamente un día de menos para que en la lógica me tenga en cuenta el día inicial.

Muchas gracias por vuestra paciencia ;)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar