SoloCodigo

Programación Web y Scripting => PHP => Mensaje iniciado por: J-Ant en Viernes 12 de Noviembre de 2010, 12:34

Título: Script para incrementar dias a una fecha
Publicado por: J-Ant en Viernes 12 de Noviembre de 2010, 12:34
Buenas, estoy como quien dice, iniciandome en php, e intento añadir un intervalo de dias a una fecha dada, siempre que dicha fecha esté en un intevalo.
El asunto es que no funciona, me da"Warning: mktime() expects parameter 6 to be long".

Os paso el codigo, a ver si se os ocurre algo:

<?php
$Inicio = "10/11/2010";
$Fin= "10/05/2011";
$Fecha=$Inicio;
$Dias= date('t', $Fecha);
echo "Fecha Inicio intervalo " , $Inicio, "<br>";
echo "Fecha Fin Intervalo " , $Fin,"<br>";
echo "Dias del mes ", $Dias,"<br>";
echo $Fecha;
do {
   $Dias= date('t', $Fecha);
   echo $Dias;
   echo $Fecha, "<br>";
   $dyh = mktime(0, 0, 0, $Fecha[1], $Fecha[0], $Fecha[2]) + 24*60*60*$Dias;
   $Fecha = date('d',$dyh)."/".date('m',$dyh)."/".date('Y',$dyh);
   echo $Fecha, "<br>";
}
while ($Fecha < $Fin);


?>



Gracias de antemano
Título: Re: Script para incrementar dias a una fecha
Publicado por: fonsi3 en Sábado 13 de Noviembre de 2010, 14:53
Estoy viendo que $fecha contiene un string, entonces porque lo accedes como si fuera un array??
Título: Re: Script para incrementar dias a una fecha
Publicado por: J-Ant en Lunes 15 de Noviembre de 2010, 13:17
Cierto, mezcle codigo, éste venia de un explode.
La idea es la siguiente: Estoy modificando un calendario, que tiene agenda de eventos, y para dicha agenda, necesito que una tarea/evento se pueda repetir durante x tiempo. Pongamos por ejemplo, una reunion con distintos departamentos cada 20 de mes, o llamar al asesor cada 3 meses, el dia 3.

Para ello, necesito la fecha de inicio del intervalo, la fecha de finalizacion, la frecuencia(cada mes, cada 2 meses, cada año), y el dia que ocurrira el evento(cada dia 22, cada dia 3, etc).

Por eso, creé el script en el que queria añadir un nº determinado de dias a una fecha.
Ejemplo:
Inicio: 15/11/2010
Fin: 30/05/2011
Frecuencia: cada 2 meses
Dia: 3(el evento se realizara cada dia 3).
El codigo original, os lo paso, tiene 2 fallos:
1) Al añadir dias a una fecha, toma como valor fijo 30 dias por mes, con lo que ignora variaciones Febrero(28), o Marzo(31).
2) Se puede decidir cada cuanto tiempo quiero el evento(cada 2 meses, 2 años, cada mes, etc), pero no toma en cuenta la variable donde se recoge dicho dato.
Citar
if($type == 'Monthly') {
//Variables que se recogen:
//$Type: Tipo de repeticion(Diaria, Semanal, mensual o anual)
//avg_monthcount: El asunto principal por el que falla, los dias del mes. Coge 30
//$Interval: Intervalo en dias final.(Dia 3 + 30 dias)
//$Starting: Fecha inicio de intervalo
// $limiting: Fecha fin del intervalo
//$Repeatinteval: La variable que devuelve la fecha una vez sumados los dias
//Errores: 1) No se utiliza la frecuencia(cada 2 meses, cada 2 años), que se recoge en una variable $Frequency. En su lugar está la variable $count, que agregara al calendario, en funcion del tipo, una repeticion mensual, anual, sin tener en cuenta la frecuencia(cada 2 meses, cada 2 años, etc)
//2) Se toma como numero de dias del mes 30, en $avg_monthcount
$count = 0;
$avg_monthcount = 30;
while(true) {
++$count;
$interval = $count * $avg_monthcount;

if(self::mktime(self::nexttime($starting, "+$interval days")) > $limiting) {
break;
}
$repeatInterval[] = $interval;
}
} else if($type == 'Yearly') {
//fallaria en años bisiestos
$count = 0;
$avg_monthcount = 365;
while(true) {
++$count;
$interval = $count * $avg_monthcount;
if(self::mktime(self::nexttime($starting, "+$interval days")) > $limiting) {
break;
}
$repeatInterval[] = $interval;
}
}
return $repeatInterval;

Gracias de nuevo por la atención.
Título: Re: Script para incrementar dias a una fecha
Publicado por: LeGatoRojo en Martes 16 de Noviembre de 2010, 18:07
Para esos casos, yo siempre ocupo MySQL

Código: PHP
  1.  
  2.  
  3. mysql_query("SELECT DATE_ADD('2010-03-26', INTERVAL 123 DAY)");
  4.  
  5.  
  6.