DateFilter

edited julio 2008 in Principiantes
Hola, quisiera saber que utilidad tiene la clase DateFilter (archivo library/kumbia/Filter/base_filters/date.php)

ya que segun he visto solo tiene el metodo execute ya que implementa la interfaz, pero he hecho una prueba y devuelve la misma fecha que recibe.

Si la utilidad fuera, validar una fecha, deberia incluir los años bisiestos, cosa que no controla.

Además, si pones esta fecha la imprime en vez de devolver ""

$a = new DateFilter();
$a->execute("2008-07-013");

devuelve 2008-07-01, cuando en realidad deberia devolver "". Aunque como no se cual es la finalidad ...

Gracias

PD: Aparte de plantear esta 'duda', tambien animo a la gente que investigue por los archivos y exponga sus dudas.

Un saludo

Comentarios

  • Precisamente son filtros que le aplicas a una cadena y si tiene el metodo execute porq se llega a el mediante una interfaz y esta es la implementacion de ese metodo ojo para efecto del DateFilter seguramente hay que revisarla...

    Como bien se dijo la idea es ir testeando el framework para encontrar estos fallos...

    Gracias...
  • edited 12:00
    Pero sigo sin tener claro, la finalidad de DateFilder. Ver que una fecha es correcta? Extraer una cadena de una cadena?

    Un saludo

    PD: Me imagino que usar los Filter, será para usarlos de Adaptador, para el caso de que PHP cambie alguna instruccion, asi solo habria que cambiar el Filter correspondiente no?
  • ver si un formato de fecha es correcto... por ejemplo existen otros filter te menciono uno el alpha este filter si tu le pasas una cadena con estos valores "HSD&&&^%$#@ el te devuelve HSD" osea te aplico un filtro...
  • edited 12:00
    He escrito un codigo para que vea si una fecha es correcta o no. No lo he probado 100% y seguramente se podrá limpiar el codigo:
    public function execute($s){
    		$patron = '/^(19|20)(\d{2})-(0?[1-9]|1[0-2])-(0?[1-9]|[1-3][0-9])$/';
    		
    		$fechaCorrecta = false;
    		if(preg_match($patron, $s, $regs)){
    			$year = $regs[1] . $regs[2];
    			$month = $this->quitarCerosIzq($regs[3]);
    			$day = $regs[4];
    			
    			$monthWith31Days = array('1','3','5','7','8','10','12');
    			$monthWith30Days = array('4','6','9','11');
    			
    			
    			if (($year % 4 == 0) && (($year % 100 != 0) || ($year % 400 == 0))){
    				// Año Bisiesto
    				if($month == '2'){
    					// Mes Febrero
    					if(0 < $day && $day <= '29'){
    						$fechaCorrecta = true;
    					}
    				}
    			}else{
    				if($month == '2'){
    					// Mes Febrero
    					if(0 < $day && $day <= '28'){
    						$fechaCorrecta = true;
    					}
    				}
    			}
    			
    			if (in_array($month,$monthWith31Days)){
    				if(0 < $day && $day <= 31){
    					$fechaCorrecta = true;
    				}
    			}
    			else if (in_array($month,$monthWith30Days)){
    				if(0 < $day && $day <= 30){
    					$fechaCorrecta = true;
    				}
    			}
    			//return $regs;
    		}
    		if($fechaCorrecta)
    			return $year . '-' . $this->ponerCero($month) . '-' . $day;
    		else
    			return '';
    	}
    	
    	public function quitarCerosIzq($num){
    		if(substr($num,0,1) == '0')
    			return substr($num,1);
    		else
    			return $num;
    	}
    	public function ponerCero($num){
    		if( strlen($num) == 1)
    			return '0'.$num;
    		else
    			return $num;
    	}
    

    Un saludo
  • apenas tenga un chance la reviso y si efectivamente funciona se puede subir al framework como una implementacion de DateFilter, gracias...
Sign In or Register to comment.