Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/11/2015, 21:31
Avatar de gonzaherrera77
gonzaherrera77
 
Fecha de Ingreso: noviembre-2015
Mensajes: 60
Antigüedad: 9 años, 3 meses
Puntos: 7
Ejecicio clase Fecha

Buenas comunidad, tengo el siguiente enunciado.
Cita:
Crea una clase Fecha con atributos para el día, el mes y el año de la fecha.
Incluye, al menos, los siguientes métodos:
  1. Constructor predeterminado con el 1-1-1900 como fecha por defecto.
  2. Constructor parametrizado con día, mes y año.
  3. leer() : pedirá al usuario el día (1 a 31), el mes (1 a 12) y el año (1900 a 2050).
  4. bisiesto() : indicará si el año de la fecha es bisiesto o no.
  5. diasMes(int) : devolverá el número de días del mes que se le indique (para el año de la fecha).
  6. valida() : comprobará si la fecha es correcta (entre el 1-1-1900 y el 31-12-2050); si el día no es correcto, lo pondrá a 1; si el mes no es correcto, lo pondrá a 1; y si el año no es correcto, lo pondrá a 1900. Será un método auxiliar (privado). Este método se llamará en el constructor parametrizado y en leer() .
  7. diasTranscurridos() : devolverá el número de días transcurridos desde el 1-1-1900 hasta la fecha.
  8. diaSemana() : devolverá el día de la semana de la fecha (0 para domingo, ..., 6 para sábado). El 1-1-1900 fue domingo.
  9. siguiente() : pasará al día siguiente.
  10. anterior() : pasará al día anterior.
Esta seria la clase

Código PHP:
Ver original
  1. <?php
  2. class Fecha {
  3.     private $day;
  4.     private $month;
  5.     private $year;
  6.    
  7.     public function __construct($day = 1, $month = 1, $year = 1900) {
  8.         $this->day = $day;
  9.         $this->month = $month;
  10.         $this->year = $year;
  11.     }
  12.    
  13.     public function leer($day, $month, $year) {
  14.         if($this->validarFecha($day, $month, $year)) {
  15.             $this->day = $day;
  16.             $this->month = $month;
  17.             $this->year = $year;
  18.         }
  19.         else {
  20.             echo 'La fecha no es valida!!!';
  21.         }
  22.     }
  23.    
  24.     private function validarFecha($day, $month, $year) {
  25.         if($day > 0 && $day < 32) {
  26.             $dayOk = true;
  27.         }
  28.         else {
  29.             $dayOk = false;
  30.         }
  31.        
  32.         if($month > 0 && $month < 13) {
  33.             $monthOk = true;
  34.         }
  35.         else {
  36.             $monthOk = false;
  37.         }
  38.        
  39.         if($year >= 1900 && $year <= 2050) {
  40.             $yearOk = true;
  41.         }
  42.         else {
  43.             $yearOk = false;
  44.         }
  45.        
  46.         if($dayOk && $monthOk && $yearOk) {
  47.              return true;
  48.         }
  49.         else {
  50.             return false;
  51.         }
  52.     }
  53.    
  54.     public function esBisiesto() {
  55.         if($this->year % 4 == 0  && ($this->year % 100 != 0 || $this->year % 400 == 0)) {
  56.             echo 'Es Bisiesto<br />';
  57.         }
  58.         else {
  59.             echo 'No es Bisiesto<br />';
  60.         }
  61.     }
  62.    
  63.     public function diaMes($month) {
  64.         $fecha = "$this->day-$month-$this->year";
  65.         $timestamp = strtotime($fecha);
  66.         $diaMes = date('t', $timestamp);
  67.         echo 'El mes '.$month.'  tiene '.$diaMes.' dia/s';
  68.     }
  69.    
  70.     public function diasTranscurridos() {
  71.      
  72.        $diasDefault = gregoriantojd(1, 1, 1900);
  73.        
  74.        $fechaActual = explode('-', date('j-n-Y'));
  75.        $diasActual = gregoriantojd($fechaActual[1], $fechaActual[0], $fechaActual[2]);
  76.        
  77.        $diasTranscurridos = $diasActual - $diasDefault;
  78.        
  79.        echo 'Dias trancurridos de la fecha 1-1-1900 hasta la fecha actual '.$diasTranscurridos.' diasz<br />';
  80.  
  81.     }
  82.    
  83.     public function diaSemana() {
  84.         $diaSemana = gregoriantojd(1, 1, 1900);
  85.         $diaSemana = jddayofweek($diaSemana, 0);
  86.        
  87.         echo 'El dia de la fecha 1-1-1900 es '.$diaSemana;
  88.     }
  89.    
  90.     public function siguiente() {
  91.         $this->day++;
  92.     }
  93.    
  94.     public function anterior() {
  95.         $this->day--;
  96.     }
  97. }
  98.  
  99. $fecha = new Fecha();
  100. $fecha->leer(1,1,2014);
  101. $fecha->diasTranscurridos();
  102. $fecha->diaSemana();
  103. $fecha->anterior();
  104. ?>

En el metodo diasTranscurridos() tuve que hacer una conversión de gregoriano a juliano, por es menor que la fecha del timestamp.

Al igual que al metodo diaSemana().

Queria saber como plantiarian esta misma clase algunos de ustedes ya que yo recien estoy empezando y debe tener algunos errores. Tambien alas propiedades que estoy usando adentro de la clase como son $diaSemana, $diasDefault, $fechaActual, ect. Se hacen propiedades publicas?

¡Saludos!