Vamos a crear un programa en PHP que nos convierta una cantidad de tiempo en segundos ingresada por un usuario a horas, minutos y segundos.
Pasos del programa
Primero debemos solicitarle al usuario la cantidad de segundos a convertir. Para esto podemos utilizar la función readline() el cual nos ayuda a pedir datos:
<?phpreadline("Ingresa el tiempo en segundos: ");Estos datos deberíamos guardarlos en una variable:$segundos=readline("Ingresa el tiempo en segundos: ");
Ahora sí, para la conversión debemos primero obtener la cantidad de horas. Para ello, debemos dividir la cantidad de segundos ingresados por el usuario por la cantidad de segundos que tiene 1 hora:
$horas=$segundos/3600;# 1 hora tiene 3600 segundos
Ya que tenemos la cantidad de horas, obtengamos la cantidad de minutos. Previo a esto, tenemos que obtener el residuo de la división anterior, pues los segundos que sobró representarán la cantidad de minutos. Además, el valor de $segundos será reasignado al valor de este residuo:
$horas=$segundos/3600;# 1 hora tiene 3600 segundos.$segundos=$segundos%3600;# Sacamos el módulo para obtener el residuo de una división.
Ahora convirtamos la cantidad de segundos sobrantes a minutos:
$minutos=$segundos/60;# 1 minuto tiene 60 segundos.
Finalmente, el residuo de esta última división van a representar los segundos:
$segundos=$segundos%60;
Si queremos ver la conversión en nuestra pantalla podemos imprimirlo de esta manera:
Para evitar problemas con la precedencia y asociatividad de los operadores, es recomendable usar paréntesis en las operaciones.
Código final
Finalmente, el código resultante de nuestro programa en PHP es el siguiente:
<?php$segundos=readline("Ingresa el tiempo en segundos: ");$horas=(int)($segundos/3600);$segundos=(int)($segundos%3600);$minutos=(int)($segundos/60);$segundos=(int)($segundos%60);echo"Son $horas horas, $minutos minutos y $segundos segundos.";echo"\n";
Reto
Ahora te toca hacer un programa que convierta horas, minutos y segundos a únicamente segundos. 🤠
<?php
$horas=readline("Ingresa el numero de horas: ");$minutis=readline("Ingresa el numero de minutos: ");$segundos=readline("Ingresa el numero de segundos: ");$totalSegundos=($horas*3600)+($minutis*60)+($segundos);echo "El total de segundos es $totalSegundos";
Super!👏😀
Resultado del reto:
<?php
$time =readline("Ingrese la hora en formato (hh:mm:ss): ");$array_time =explode(':',$time);$seconds =(int) $array_time[0]*3600;$seconds +=(int) $array_time[1]*60;$seconds +=(int) $array_time[2];echo "En total son $seconds segundos";
Hola, ¿por qué los minutos los multiplicas por 60?
Hola Valentina.
Eso se hace por que en 1 minuto hay 60 segundos y en 1 hora hay 3600 segundos :)
Para quienes tienen problemas en donde su términal no reconoce php, esto les va a servir de ayuda
Configuración de path
¡Gracias! 😁
Aquí les dejo mi aportación:
<?php
//Ingresamos los datos desde el front$horas =readline("Ingresa tus horas: ");$minutos =readline("Ingresa tus minutos: ");$segundos =readline("Ingresa tus segundos: ");// Definimos las constantes en segundos y minutosdefine("SEGUNDOS_HORA",3600);define("MINUTOS_HORA",60);// Calculamos cuantos segundos son las horas y minutos introducidos$horas = $horas *SEGUNDOS_HORA;$minutos = $minutos *MINUTOS_HORA;//Sumamos los segundos para definir una variable que nos de el total$total = $horas+$minutos+$segundos;// Mostramos en pantalla los datos calculadosecho "Segundos hora/s: ".$horas."\n";echo "Segundos minuto/s: ".$minutos."\n";echo "Segundos: ".$segundos."\n";echo "La suma total en segundos es de: ".$total;echo "\n";
Mi forma de solucionar el reto:
<?php
$horas =readline("Ingresa la hora: ");$minutos =readline("Ingresa los minutos: ");$segundos =readline("Ingresa los segundos: ");$horas =(int)($horas *3600);$minutos =(int)($minutos *60);$result = $horas + $minutos + $segundos;echo "Son $result segundos. \n";
Para los que utilizan XAMPP desde Windows e intentan abrir el archivo en la web, no se puede ejecutar la función readline() en el navegador directamente. En su lugar, pueden abrir el panel de control de XAMPP y ejecutar la terminal de allí (el botón que dice shell), desde ahí se puede ejecutar el archivo php.
Gracias!
muchas gracias
no conocia la funcion readline
Tampoco me conoce la función readline :(
Yo use Floor
$user_time =readline("enter the time in seconds: ");$hour = floor$user_time /3600);$minute =floor(($user_time -($hour *3600))/60);$seconds = $user_time %3600%60;echo "The time is: $hour hours, $minute minutes and $seconds seconds";// input: 3500// result: The time is: 0 hours, 58 minutes and 20 seconds
alguien sabe porque no puedo usar el readline en el vs
podrias mandar captura, pero te recuerdo que la sintaxis es así
variableEnDondeGuardar =readline("Mensaje);
Yo encontré otra manera útil de solventar lo de la precedencia; en algunos casos también puede ser conveniente forzarlo a convertirse en integer durante echo, para entonces así no modificar los valores de la variable:
Si luego se quisieran usar esos valores a detalle, se pueden seguir usando las mismas variables ya que estas solo se transforman en el echo.
Para ingresar datos en un entorno web, como index.php en localhost, puedes usar formularios HTML en lugar de readline, que es para consola.
Aquí hay un ejemplo simple:
<formmethod="POST"action="index.php"><labelfor="segundos">Ingresa el tiempo en segundos:</label><inputtype="number"name="segundos"required><inputtype="submit"value="Convertir"></form><?phpif($_SERVER["REQUEST_METHOD"]=="POST"){$segundos=(int)$_POST['segundos'];// Aquí pones la lógica de conversión}?>
Con este formulario, los datos se envían a index.php y puedes procesarlos.
Me quedé en el minuto 5 y creí que si podía terminarlo solita, entonces le puse pausa y empecé a hacerlo. ¡Terminó bien! :D fui ajustandole cositas y listo.
cuando escribo readline() me tira error, dice que esa función no esta definida. Alguno sabe como solucionarlo?
¡Hola! ¿En dónde estás ejecutando tu archivo de PHP? Si lo estás ejecutando desde tu navegador entonces la función no va a funcionar porque esta función se encarga de leer texto desde la terminal (no desde el navegador).
Si ejecutas tu código directamente en la terminal entonces debería funcionar :D. Para leer datos desde el navegador necesitamos usar un input de HTML, pero eso lo veremos en un siguiente curso, te recomiendo seguir este usando la terminal 💚
me pasa exactamente lo mismo :D
sigo sin poder utilizar la terminal para ir viendo mis avances, alguno me puede decir a que puede deberse
Cannot validate since c:\xampp\htdocs\curso-php is not a valid php executable. Use the setting 'php.validate.executablePath' to configure the PHP executable.
ESTO ES LO QUE ME SALE
Pasa captura, pero de ante mano te digo que uses una terminal como WLS o Ubuntu
Aunque no es el reto, agregué al programa de la clase, constantes y condicionales para que solo se leyera los días si hubiera.
<?php
// $segundos = readline("Ingresa el tiempo en segundos: ");// $horas = (int) ($segundos / 3600);// $segundos = $segundos % 3600;// $minutos = (int) ($segundos / 60);// $segundos = (int) ($segundos % 60);// echo "Son $horas horas, $minutos minutos y $segundos segundos";$horas =readline("Ingrese el tiempo en horas: ");$horasSegundos =(int)($horas *3600);$minutos =readline("Ingrese el tiempo en minutos: ");$minutosSegundos =(int)($minutos *60);$segundos =readline("Ingrese el tiempo en segundos: ");$totalSegundos = $horasSegundos + $minutosSegundos + $segundos;echo "En $horas horas hay $horasSegundos segundos\n";echo "En $minutos minutos hay $minutosSegundos segundos\n";echo "En $segundos segundos hay $segundos segundos\n";echo "En total de $horas horas, $minutos minutos y $segundos segundos hay $totalSegundos segundos.";echo "\n";
y la demostración:
Cordial saludo.
Hasta el momento me ha parecido muy interesante el curso
Pero solicito muy amablemente me indique como hago para que este programa me acepte por pantalla lo digitado desde un navegador Windows
Agradezco su pronta respuesta.
RETO
<?php
$horas =readline("Ingresa las horas: "); $minutos =readline("Ingresa los minutos: "); $segundos =readline("Ingresa los segundos: "); $total_segundos =($horas *3600)+($minutos *60)+($segundos); echo "El total de segundos es: $total_segundos";?>
Mi solución al reto 👀
<?php$hours=readline("Please enter the Hours (h):");$minutes=readline("Please, enter the Minutes (m): ");$seconds=readline("Please, enter the Seconds (s): ");$hours=($hours*3600);$minutes=($minutes*60);$total_seconds=$hours+$minutes+$seconds;echo"$total_seconds seconds";echo"\n";
Buena hay en segundos no le hiciste ninguna operación por que ya lo digitas por consola 🎈
facilito xD
se asigne los valores directamente en codigo ya que no puedo ejecutar el php por consola :$
<?php
$horas =readline("Ingresa el tiempo en horas: ");$minutos =readline("Ingresa el tiempo en minutos: ");$segundos =readline("Ingresa el tiempo en segundos: ");$segundos_totales =0;$horas =5;$minutos =25;$segundos =45;$horas *=3600;$minutos *=60;$segundos_totales = $horas + $minutos + $segundos;echo "El tiempo en segundos es: $segundos_totales segundos";