New question

Question:

Date: 18-11-2015 11:49:10 (In Spanish)

PHP POO Clase Hora Ejercicio[Resolved]

Buenas comunidad yo de nuevo por aquí, quemando pestañas con POO jajaj

Tengo este enunciado:

Crea una clase Hora con atributos para las horas, los minutos y los segundos de la hora.
Incluye, al menos, los siguientes métodos:

Constructor predeterminado con el 00:00:00 como hora por defecto.
leer() : pedirá al usuario las horas, los minutos y los segundos.
valida() : comprobará si la hora es correcta; si no lo es la ajustará. Será un método
auxiliar (privado) que se llamará en el constructor parametrizado y en leer()
print() : mostrará la hora
aSegundos() : devolverá el número de segundos transcurridos desde la medianoche.


<?php

class Hora  {
    private $second;
    private $minute;
    private $hour;
    
    public function __construct($h = "00", $m = "00", $s = "00") {
        $this->hour = $h;
        $this->minute = $m;
        $this->second = $s;
    }
    
    public function leer($h, $m, $s) {
        $this->hour = $h;
        $this->minute = $m;
        $this->second = $s;
        
        $this->valida();
    }
    
    private function valida() {
        if($this->hour < 0 || $this->hour > 23) {
            $hOk = false;
        }
        else {
            $hOk = true;
        }
        
        if($this->minute < 0 || $this->minute > 59) {
            $mOk = false;
        }
        else {
            $mOk = true;
        }
        
        if($this->second < 0 || $this->second > 59) {
            $sOk = false;
        }
        else {
            $sOk = true;
        }
        
        //Si da alguna  verdadero con el signo de negacion lo vuelvo a verdadero y inicio todo en 0.
        if(!$hOk || !$mOk || !$sOk) {
            $this->hour = "00";
            $this->minute = "00";
            $this->second = "00";
        }
    }
    
    public function pintar() {
        echo 'Hora: '.$this->hour.':'.$this->minute.':'.$this->second;
    }
    
    public function aSegundos() {
        
        $hora = "24:00:00";
        $separa[0] = explode(":", $hora);
        
        $segundosTranscurridos[0] = ($this->hour*60*60) + $this->minute*60+ $this->second;
        $segundosTranscurridos[1] = ($separa[0][0]*60*60) + $separa[0][1]*60 + $separa[0][2];
        
        $segundosTranscurridos = $segundosTranscurridos[1] - $segundosTranscurridos[0];
        
        echo '<br/>'.$segundosTranscurridos.' Segundos';
    }
}

$hora = new Hora();
$hora->leer("07","00","00");
$hora->pintar();
$hora->aSegundos();
?>


Bueno gente esta bien el metodo aSegundos() y plantiada la clase? El metodo a segundos lo que hago es declarar una variable $hora y poneler la hora. Despues con la función explore convierto a ese string en un array. Despues en segundosTranscurridos[0] a la hora la convierto a segundos, los minutos tambien y sumo todo. Despues resto la hora que ingreso el usuario con el metodo leer y le resto la otra hora para que me den los segundos transcurridos.


------------------------------------------------------------------------------------------------------------------------------------------------------------

Modificación


aSegundos() : devolverá el número de segundos transcurridos desde la medianoche.
segundosDesde(Hora) : devolverá el número de segundos entre la hora y la
proporcionada.

Replantee metodo aSegundos y agregue un nuevo metodo

    public function aSegundos() {
        
        $hora1 = mktime('24','00','00');
        $hora2 = mktime($this->hour, $this->minute, $this->second);
        
        $segundos = $hora1 - $hora2;
        
        echo '<p>'.$segundos.' Segundos.</p>';
        
    }
    public function deSegundos($seconds) {
        $nuevaHora = strtotime('+'.$seconds.' seconds', strtotime('00-00-00') );
        $nuevaHora = date('H:i:s', $nuevaHora);
        
        echo 'Hora: '.$nuevaHora;
    }


Si alguien puede darme un consejo o algo por que estoy medio perdido, no se si estara bien.

¡Saludos!
Tags: DateTime - object oriented programming - OOP - PHP - PHP Class - Question - Timestamp - timezone Votes: 0 - Answers: 2 - Views: 14 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 19-11-2015 09:19:14 Hola Gonzalo,
    Tal vez te convenga utilizar la clase DateTime, podrías reducir la cantidad de líneas y te ahorras validaciones.
      Votes: 3 - Link answer
     
  • Date: 19-11-2015 09:37:20 Si justo recien hice otro metodo para para comprar hora, y use esa clase.

        public function igualQue($hora) {
            $datetime1 = new DateTime($hora);
            $datetime2 = new DateTime($this->hour.':'.$this->minute.':'.$this->second);
            
            if($datetime1 == $datetime2) {
                echo '<p>Son iguales</p>';
            }
            else {
                echo '<p>No son iguales</p>';
            }
        }


    Seguire mirando un poco, gracias Ernesto.
      Votes: 3 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In
 
frjcbbae garagebible.com