Foros del Web » Programando para Internet » PHP »

Funciones para validar fecha en un rango incluyente o excluyente.

Estas en el tema de Funciones para validar fecha en un rango incluyente o excluyente. en el foro de PHP en Foros del Web. Hola. Ahora me ha tocado reinventar ruedas, en fin, espero que a alguien le sirva. Saludos. //Validar fecha dentro de rangos incluyentes ó excluyentes //Probado ...
  #1 (permalink)  
Antiguo 17/09/2013, 14:37
 
Fecha de Ingreso: julio-2013
Ubicación: México
Mensajes: 361
Antigüedad: 11 años, 3 meses
Puntos: 55
Funciones para validar fecha en un rango incluyente o excluyente.

Hola.

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] < ) ? "sub" "add" ;
        
$add_or_sub_2 = ( $range[1] < ) ? "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 ;
    }


Etiquetas: datetime, rangos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 3 personas




La zona horaria es GMT -6. Ahora son las 09:00.