Ahora me ha tocado reinventar ruedas, en fin, espero que a alguien le sirva.
Saludos.
//Validar fecha dentro de rangos incluyentes ó excluyentes
//Probado con PHP 5.3
//a)La fecha proporcionada debe estar previamente validada.
//b)Los formatos de fechas estan en el manual PHP en DateTime
// Los mas comunes son "d-m-Y" "m/d/Y" y "Y-m-d'
//function isValidDateRangeDinamic
//Formato de rango = "val2" ó "val1|val2" (la separacion es una barra vertical --> | <-- )
//val1 y val2 son la representacion en días a partir del día actual
//ejemplo "-1" es menos 1 día a partir de hoy
//ejemplo "30" es más 30 días a partir de hoy
//datos que deben ser ingresados en val1 o val2 = enteros negativos ó positivos
//Funcionamiento
//Si solo se otorga un valor lo tomara siempre como un valor positivo
//Ejemplo isValidDateRangeDinamic('d-m-Y','25-09-2013','-10'); regresará true tomando en cuenta que hoy es 17-09-2013
//El rango a validar es del 17-09-2013 al 27-09-2013 de forma incluyente
//Si val1 < val2 rango inlcuyente (se revisa que la fecha dada este dentro de ese rango)
//Ejemplo isValidDateRangeDinamic('d-m-Y','25-09-2013','0|10'); regresará true tomando en cuenta que hoy es 17-09-2013
//El rango de inclusion es del 17-09-2013(0 días) al 27-09-2013(+10 días)
//Si val1 > val2 rango excluyente (se revisa que la fecha dada NO este dentro de ese rango)
//Ejemplo isValidDateRangeDinamic('d-m-Y','25-09-2013','10|-5'); regresará false tomando en cuenta que hoy es 17-09-2013
//El rango de exclusion es del 12-09-2013(-5 días) al 27-09-2013(+10 días)
//function isValidDateRange
//Se deben proporcionar los 2 parametros del rango
//Ejemplo isValidDateRange('d-m-Y','25-09-2013','10-09-2013|20-09-2013');
Código PHP:
function isValidDateRangeDinamic($FormatDate,$RecibedDate,$range){
$range=explode( '|' , $range );
$args=count($range);
if($args == 1){
$MinLimit = 0;
$MaxLimit = abs($range[0]);
$add_or_sub_1 = "add";
$add_or_sub_2 = "add";
}
if($args == 2){
$add_or_sub_1 = ( $range[0] < 0 ) ? "sub" : "add" ;
$add_or_sub_2 = ( $range[1] < 0 ) ? "sub" : "add" ;
$MinLimit = abs($range[0]);
$MaxLimit = abs($range[1]);
}
//llamada a la funcion sub o add de DateTime con una variable
$past = new DateTime('now');
$past->$add_or_sub_1(new DateInterval("P".$MinLimit."D"));
$future = new DateTime('now');
$future->$add_or_sub_2(new DateInterval("P".$MaxLimit."D"));
$DateTo = DateTime::createFromFormat($FormatDate, $RecibedDate);
if ( $DateTo->format($FormatDate) != $RecibedDate ) { return false; }
if($future >= $past){
return ( $past <= $DateTo and $future >= $DateTo ) ? true : false ;
}else{
return ( $past <= $DateTo or $future >= $DateTo ) ? true : false ;
}
}
function isValidDateRange($FormatDate,$RecibedDate,$range){
$range=explode( '|' , $range );
$DateTo = DateTime::createFromFormat( $FormatDate , $RecibedDate );
if ( $DateTo -> format($FormatDate) != $RecibedDate ) { return false; }
$past = DateTime::createFromFormat( $FormatDate , $range['0'] );
$future = DateTime::createFromFormat( $FormatDate , $range['1'] );
if($future >= $past){
return ( $past <= $DateTo and $future >= $DateTo ) ? true : false ;
}else{
return ( $past <= $DateTo or $future >= $DateTo ) ? true : false ;
}
}