Curso Práctico de PHP

Curso Práctico de PHP

Ana Belisa Martínez

Ana Belisa Martínez

Cómo entrenar tu pensamiento lógico

3/17
Recursos

Aportes 19

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

$input = '07:05:45 PM';

$firstSplit = explode(' ', $input);
# ['07:05:45', 'PM']
$secondSplit = explode(':', $firstSplit[0]);
# ['07', '05', '45']

$time = $firstSplit[1];
$hours = $secondSplit[0];
$minuts = $secondSplit[1];
$seconds = $secondSplit[2];

if ($time === 'AM' && $hours === '12') {
    $hours = '00';
}

if ($time === 'PM' && $hours < '12') {
    $hours = strval(+$hours + 12);
}

$output = "{$hours}:{$minuts}:{$seconds}";

echo "{$output} \n";

3. Cómo entrenar tu pensamiento lógico

Formas de entrenar tu pensamiento lógico:

  1. Plataformas de retos online: Aquí algunos recursos (compartido por otro compañero).
  1. Diagramas de flujo
  1. Escribir el paso a paso de varias formas.
  2. Resolver ejercicios matemáticos

Adoro el tono de voz de esta profe…

function getMilitarTime(string $input): string 
{
    $hh     = (int) substr($input,0,2);
    $PM_AM  = substr($input, 9);

    if ($hh === 12 && $PM_AM === 'AM') {
        $hh = 00;
    } else if ($hh < 12 && $PM_AM === 'PM') {
        $hh += 12;
    }

    return $hh . substr($input,2,6);
}

echo getMilitarTime('04:00:00 PM'); 

Quiero recomendar una página enfocada mayormente a problemas logico / matemáticos, no es una plataforma como tal como HackerRank, es parecida con pocas funcionalidades, pero tiene miles de problemas a resolver.

Project Euler.
----> https://projecteuler.net/

  1. identificar las entradas o datos necesarios para realizar el proceso
  2. Identificar las operaciones, necesarias para cumplir lo que necesitamos, suma, resta, división, comparaciones, etc
  3. Presentar la salida del resultado del proceso

Cambiar el formato de hora de doce horas a hora militar aplicamos lo siguiente, si H es mayor a 12, entonces hora militar es igual a Hora más doce (HM = H + 12)

<?php

$entrada = "12:05:45 PM";
$separar_letras = explode (" ",$entrada);
$separar_numeros = explode (":",$separar_letras[0]);

$horas = $separar_numeros[0];
$minutos = $separar_numeros[1];
$segundos = $separar_numeros[2];
$t = $separar_letras[1];

if ($horas == 12 && $t == "AM")
    $horas = "00";
elseif ($horas < 12 && $t == "PM")
    $horas = ((int) $horas) +12;

echo "$horas:$minutos:$segundos \n";
<?php

echo "Conversionr de hora \n";

$horaNormal = readline('Ingrega la hora en el siguiente formato 01:45:20:PM : ');

$horaNormal = preg_split('/[\s,:;]+/', $horaNormal);

horaMilitar($horaNormal);

function horaMilitar($hora) {
    if(count($hora) >= 3) {
        $hora[3] = strtolower((string) $hora[3]);
        if ($hora[0] == 12 && $hora[3] == 'am' ) {
        } else if ($hora[0] < 12 && $hora[3] == 'pm') {
            $hora[0] += 12;
        }
        unset($hora[3]);
        echo "Hora Militar: {$hora[0]}:{$hora[1]}:{$hora[2]}";
    } else {
        echo "ingreso la hora incorrectamente";
    }
}
echo "\n";

Mi solución utilizando clases en PHP 😃

Estaría excelente leer sus comentarios. ¡Muchas gracias!

function modificar_hora($hora){  
    if(str_contains($hora, 'pm')){
                $hora_modificada =  substr($hora, 0, 2); 
                $hora_modificada = $hora_modificada + 12;
                return "La hora modificada es $hora_modificada" . substr($hora,2,6);
    }else{
                return "La hora es " . substr($hora,0,8);
    }
}
echo modificar_hora("04:20:15am");

en lo personal encontré 2 formas de hacerlo así

<?php


echo "conversor de horas de formato 12 horas a 24 \n\n";
$hora = readline( "ingresa la hora " );
$minutos = readline( "ingresa los minutos " );
$pa = readline( "ingresa si es AM o PM " );

if ($pa == "pm"){

    $hora = $hora + 12;
    echo "la hora es " . $hora . ":". $minutos . "pm \n";
}else{
    echo "la hora es " . $hora . ":". $minutos . "am \n";
}

// version 2

echo "conversor de horas de formato 12 horas a 24 \n\n";
echo "ingresa los valores de la sigueinte forma por ejemplo 04:54:34:pm \n\n";

$hora = readline( "ingresa la hora " );
$hora = explode(":", $hora);

if($hora[3] == "pm"){
    $hora[0] = $hora[0] + 12;
    unset($hora[3]);
    $hora = implode(":", $hora);
    echo "la hora es " . $hora . " \n" ;
}else{
    unset($hora[3]);
    $hora = implode(":", $hora);
    echo "la hora es " . $hora . " \n" ; 
}

<?php

$hora_input = readline("Ingresa la hora con el siguiente formato 'hh:mm:ss:AM/PM':");

$array = explode(":", $hora_input);


if ((reset($array) == "12") && (end($array) == "AM")) {
    
    $array[0] = "00";
    
}

if ((end($array) == "PM") && (reset($array) < "12")) {
    
    $array[0] = ($array[0] + 12);
    
}


echo "Son las "; 

for ($i=0; $i<(count($array)-1); $i++) {   
    echo $array[$i];

    if ($i < 2) {
        echo ":";
    }
}

echo " del dia \n";


Este sería mi código, aunque no recibe un input como tal 😦

$hora = [07,00,22,'PM'];

function cambioFormatoHora($hora){
    if($hora[3] === 'PM'){
        $newHour = 12 + $hora[0];
        echo "La hora es $newHour:$hora[1]:$hora[2] - Formato 24 hrs";
    }else{
        echo "La hora es $hora[0]:$hora[1]:$hora[2] - Formato 24 hrs";
    }
}
cambioFormatoHora($hora);
<?php

/**
 * Convertir el formato de hora AM/PM a hora militar (formato 24hrs).
 * Entrada: hh:mm:ss PM/AM
 * Salida: hh:mm:ss
 */

class Tiempo{

    public function convertHours($value){
        $data = explode(' ',$value);
        $horaCompleta = explode(':', $data[0]);
        
        $minuto = $horaCompleta[1];
        $segundo = $horaCompleta[2];
        $tiempo = $data[1];
        $hora = $horaCompleta[0];

        if ($tiempo=='AM' && $horaCompleta[0] == 12) {
            $hora = 00;
        }

        if ($tiempo == 'PM' && $horaCompleta[0]<12) {
            $hora = 12+$horaCompleta[0];
        }
        return "La hora es: $hora:$minuto:$segundo";
    }
}

$obj = new Tiempo();
print_r($obj->convertHours('05:03:30 PM'));
<?php

echo militarTime("01:00:00 AM"). '<br/>';
echo militarTime("01:00:00 PM");


function militarTime($hora)
{
    $hh = (int)substr($hora, 0, 2);
    $time = substr($hora, 9);

    if($hh === 12 && $time === 'AM') {
    
        $hh = 00;

    } elseif($hh < 12 && $time === 'PM') {
        
        $hh += 12;
    }

    return $hh . substr($hora, 2, 7);
}

Vengo de JavaScript así que resolvi el ejersicio de la siguente forma:

const horas = [13,14,15,16,17,18,19,20,21,22,23,24]
function horaMilitar(hh,mm,ss,t){
    if(t=="pm" || t=="PM"){
        for(let i = 1; i <= horas.length; i++){
            if(hh == i){
                console.log(`${horas[i-1]}:${mm}:${ss}` )
            }
        }
    } else if(t==="am" || t=="AM"){
        console.log(`${hh}:${mm}:${ss}`)
    }


}
horaMilitar(12,30,40,"pm")

Hice mi codigo en dos archivos html y php respectivamente.

El html es sencillamente un formulario para capturar datos.

Se que faltan temas de validación del formulario, pero lo importante y el aporte esta en el codigo php.

Aqui coloco mi codigo html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Hora formato militar</title>
</head>
<body>
    <header>
        <h1>Formato de hora Militar</h1>
    </header>
    <form name="militarHour" method="GET" action="./militarHour.php">
        <label for="hour">Escribe la hora</label>
        <input type="number" name="hour" id="hour" min="01" max="12" require>
        <label for="minutes">Escribe los minuts</label>
        <input type="number" name="minutes" id="minutes"  min="00" max="59" require>
        <label for="selector">Selecciona AM o PM</label>
        <select name="selector" id="selector">
            <option value="am" selected>AM</option>
            <option value="pm">PM</option>
        </select>
        <button type="submit">
            Convertir a formato Militar
        </button>
    </form>
</body>
</html>

Este formulario es enviado por metodo GET para ver en la URL los parametros que se están recibiendo. Se que por buenas prácticas esto debería enviarse por POST, pero es solo por razones educativas estoy haciéndolo en GET.

Aquí el codigo del archivo PHP que procesa el formulario.

<?php
    $hour = $_GET [ 'hour' ];
    $minutes = $_GET [ 'minutes' ];
    $selector = $_GET [ 'selector' ];
    if ($minutes < '10'){
        $minutes = '0' .$minutes;
    }
    if ($hour === '12' && $selector === 'am'){
        $hour = '0';
        if ($hour < '10'){
            $hour = '0' .$hour;
        }
        echo "La hora ingresada en formato militar es <b>$hour:$minutes</b>";
    } elseif ($selector === 'pm' && $hour <= '11'){
        $hour = '12' + $hour;
        echo "La hora ingresada en formato militar es <b>$hour:$minutes</b>";
    } else {
        if ($hour < '10'){
            $hour = '0' .$hour;
        }
        echo "La hora ingresada en formato militar es <b>$hour:$minutes</b>";
    }

Si quieres probarlo, el archivo html se llama index.html y el otro archivo se llama militarHour.php,