Programación php
Email: Password:


¡Regístrate gratis! | ¿Has perdido tu password?

Home
Blog

En él que podrás informarte de todas las noticias relacionadas con el posicionamiento de páginas web.

Ir al Blog de posicionamiento web



Foro de programación en PHP

Responder el mensaje

Script para incrementar una fecha en un nº de dias

Autor: Peque
Publicado: 15-11-2010 06:51 AM
Buenas, estoy intentando modificar un script ya hecho, pero con algunos errores. Se trata de crear eventos sobre un calendario, de manera que se pueda añadir un evento(una reunion, una llamada) cada x tiempo, bien por dias, semanas, meses, o años.
Generalmente funciona bien, pero cuando se trata de repetir evento mensual o anual, falla. Principalmente porque toma meses de 30 dias, sin tener en cuenta meses como Febrero o Marzo. Os paso el codigo, y me contais:
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;