elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  [Resuelto] ¿Qué operación matematica puedo hacer para arreglar esto?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Resuelto] ¿Qué operación matematica puedo hacer para arreglar esto?  (Leído 1,717 veces)
Leguim


Desconectado Desconectado

Mensajes: 718



Ver Perfil
[Resuelto] ¿Qué operación matematica puedo hacer para arreglar esto?
« en: 9 Febrero 2020, 04:20 am »

Estuve prácticamente casi todo el día creando un script que me permitiera, a partir de segundos obtener, años, meses, días, horas, minutos y lógicamente los segundos... el código de base lo conseguí en internet pero lo mejore bastante.

Lo que me devolvería, a partir de '100 segundos' => '1 minuto 40 segundos'
a partir de '1500000 segundos' => '50 años 9 meses 13 días 18 horas 34 minutos 40 segundos"

El problema que tengo es que en una parte del script:
Código
  1.                $secondsInAMinute = 60;
  2. $secondsInAnHour = 60 * $secondsInAMinute;
  3. $secondsInADay = 24 * $secondsInAnHour;
  4. $secondsInAMonth = 30 * $secondsInADay;
  5. $secondsInAYear = 12 * $secondsInAMonth;
  6.  

Obtengo la cantidad total de segundos por minuto, por hora, por día, por mes y por año pero existe un problema y es que los segundos por mes que es 30 * $secondsInADay el 30 serían los días pero como sabemos no todos los meses tienen 30 días... es más hasta depende de si es un año bisiesto de que si febrero traiga 28 o 29 días...

No puedo encontrar una solución o si existe una operación matematica para solventar esto, entiendo que se puede saber si un año es bisiesto con php pero eso todavía no me alcanza para poder llegar a una solución...

Mod: Temas sobre PHP van al subforo de PHP.


« Última modificación: 22 Febrero 2020, 23:27 pm por #!drvy » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: ¿Qué operación matematica puedo hacer para arreglar esto?
« Respuesta #1 en: 9 Febrero 2020, 04:46 am »

puedes simplemente hacer esto

Código
  1. echo date('y-m-d h:i:s',$segundos);

y restar 1970 al año, 1 al mes y 1 al dia... tiene cierto rango de error pero es de 1 dia cada 4 años...

tambien puedes usar mysql que en general es bastante optimo


« Última modificación: 9 Febrero 2020, 04:48 am por engel lex » En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.510


I'm fourth.


Ver Perfil WWW
Re: ¿Qué operación matematica puedo hacer para arreglar esto?
« Respuesta #2 en: 9 Febrero 2020, 14:03 pm »

Lo que tu estás considerando tiene poco que ver con operaciones matemáticas. Realmente no necesitas nada fuera de aritmética básica. El problema que tienes es que necesitas contar los días relativos a una fecha.

No estoy seguro si hay una función así exactamente en PHP pero podrías hacer esto:

Código
  1. <?php
  2. $fecha = '2001-02-01';
  3. $segundos = 3600*24*30;
  4. $d1 = new DateTime($fecha);
  5. $d2 = new DateTime($fecha);
  6. $interval = new DateInterval("PT{$segundos}S");
  7. $d1->add($interval);
  8. print_r($interval);
  9. echo $d2->format('Y-m-d H:i:s') . "\n";
  10. echo $d1->format('Y-m-d H:i:s') . "\n";
  11.  
  12. $interval2 = $d2->diff($d1);
  13.  
  14. print_r($interval2);

Código:
DateInterval Object
(
    [y] => 0
    [m] => 0
    [d] => 0
    [h] => 0
    [i] => 0
    [s] => 2592000
    [invert] => 0
    [days] => 0
)
2001-02-01 00:00:00
2001-03-03 00:00:00
DateInterval Object
(
    [y] => 0
    [m] => 1
    [d] => 2
    [h] => 0
    [i] => 0
    [s] => 0
    [invert] => 0
    [days] => 30
)
En línea

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 1.930



Ver Perfil
Re: ¿Qué operación matematica puedo hacer para arreglar esto?
« Respuesta #3 en: 9 Febrero 2020, 15:46 pm »

- Puedes ver los factores de conversión que utiliza Google, supongo que son algo más precisos, ya que revisar las reglas de fecha para los meses y años puede ser muy laborioso (bisiestos, que meses deben tener 30 o 31 días, etc):
https://www.google.com/search?q=conversor+de+unidades



Código
  1. <?php
  2.  
  3.  $total_seconds = 100;
  4.  
  5.  $secondsInAMinute = 60;
  6.  $secondsInAnHour  = 60     * $secondsInAMinute;
  7.  $secondsInADay    = 24     * $secondsInAnHour;
  8.  $secondsInAMonth  = 30.417 * $secondsInADay;
  9.  $secondsInAYear   = 12     * $secondsInAMonth;
  10.  
  11.  $years     = $total_seconds / $secondsInAYear;
  12.  $r_years   = $total_seconds % $secondsInAYear;
  13.  
  14.  $months    = $r_years / $secondsInAMonth;
  15.  $r_months  = $r_years % $secondsInAMonth;
  16.  
  17.  $days      = $r_months / $secondsInADay;
  18.  $r_days    = $r_months % $secondsInADay;
  19.  
  20.  $hours     = $r_days / $secondsInAnHour;
  21.  $r_hours   = $r_days % $secondsInAnHour;
  22.  
  23.  $minutes   = $r_hours / $secondsInAMinute;
  24.  $r_minutes = $r_hours % $secondsInAMinute;
  25.  
  26.  $seconds   = $r_minutes;
  27.  
  28.  echo "Años     : " . (int) $years   . "<br>";
  29.  echo "Meses    : " . (int) $months  . "<br>";
  30.  echo "Días     : " . (int) $days    . "<br>";
  31.  echo "Horas    : " . (int) $hours   . "<br>";
  32.  echo "Minutos  : " . (int) $minutes . "<br>";
  33.  echo "Segundos : " . (int) $seconds . "<br>";
  34. ?>

Código:
Años     : 0
Meses    : 0
Días     : 0
Horas    : 0
Minutos  : 1
Segundos : 40

- Aunque puede resultar más simple jugar con los DataInterval de PHP como comenta MinusFour.
En línea

@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.395


Turn off the red ligth


Ver Perfil WWW
Re: ¿Qué operación matematica puedo hacer para arreglar esto?
« Respuesta #4 en: 9 Febrero 2020, 16:07 pm »

Pides tareas que por el tiempo que llevas programando deberías resolver en 10 segundos. Intenta romperte un poco la cabeza.

Como hice para resolverlo. Busqué: Como calcular el año bisiesto. Implementé las condiciones de la forma más sencilla del primer resultado de google, ni la página web abrí. Probé varios años bisiestos y años no bisiestos para ver que todo funciona.

Código
  1. <html>
  2. <script>
  3. var res=0, año = parseInt(prompt("Pon el año"));
  4.  
  5. if (año % 4 == 0) {
  6.  res=1;
  7.  /* De momento es bisiesto */
  8.  if (año % 100 == 0) {
  9.  res=0;
  10.  /* Ya no es bisiesto */
  11.    if (año % 400 == 0) {
  12.  /* A menos que se cumpla esta condición */
  13.    res=1;
  14.    }
  15.  
  16.  }
  17.  
  18. }
  19.  
  20. if (res) {
  21.  alert("El año " + año + " es bisiesto.");
  22. }
  23.  
  24. else {
  25.  alert("El año " + año + " no es bisiesto.");
  26. }
  27. </script>
  28. </html>


Como siempre te complicas la vida de una forma que no tiene ni medio sentido. Si quieres saber la fecha, se la pregutas a tu sistema y la guardas. Se la preguntas a un servicio online. Se la preguntas a varios clientes y la corroboras o se la pregutas a un señor en la calle... Pero rescribir la rueda una y otra ves para tareas tan triviales solo te lleva a meter bugs y bugs y más bugs. Solo falta que se la pidas a un cliente y te dumpe la base de datos por pensar que la hora no es parámetro peligroso :')
En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

Leguim


Desconectado Desconectado

Mensajes: 718



Ver Perfil
Re: ¿Qué operación matematica puedo hacer para arreglar esto?
« Respuesta #5 en: 9 Febrero 2020, 18:15 pm »

Pides tareas que por el tiempo que llevas programando deberías resolver en 10 segundos. Intenta romperte un poco la cabeza.

Como hice para resolverlo. Busqué: Como calcular el año bisiesto. Implementé las condiciones de la forma más sencilla del primer resultado de google, ni la página web abrí. Probé varios años bisiestos y años no bisiestos para ver que todo funciona.

Código
  1. <html>
  2. <script>
  3. var res=0, año = parseInt(prompt("Pon el año"));
  4.  
  5. if (año % 4 == 0) {
  6.  res=1;
  7.  /* De momento es bisiesto */
  8.  if (año % 100 == 0) {
  9.  res=0;
  10.  /* Ya no es bisiesto */
  11.    if (año % 400 == 0) {
  12.  /* A menos que se cumpla esta condición */
  13.    res=1;
  14.    }
  15.  
  16.  }
  17.  
  18. }
  19.  
  20. if (res) {
  21.  alert("El año " + año + " es bisiesto.");
  22. }
  23.  
  24. else {
  25.  alert("El año " + año + " no es bisiesto.");
  26. }
  27. </script>
  28. </html>


Como siempre te complicas la vida de una forma que no tiene ni medio sentido. Si quieres saber la fecha, se la pregutas a tu sistema y la guardas. Se la preguntas a un servicio online. Se la preguntas a varios clientes y la corroboras o se la pregutas a un señor en la calle... Pero rescribir la rueda una y otra ves para tareas tan triviales solo te lleva a meter bugs y bugs y más bugs. Solo falta que se la pidas a un cliente y te dumpe la base de datos por pensar que la hora no es parámetro peligroso :')

Te agradezco tu ayuda, pero con todo el respeto no tenia nada que ver con el problema tu respuesta... claramente dije que ya sabia que existia una operacion para calcular el año bisiesto pero eso no era suficiente... una cosa es saber la fecha actual y otra que apartir de dos fechas obtener cuanto tiempo se lleva con el formato que mostre de x años x meses x dias x horaa x minutos x segundos.

No te creas, porque aunque tengas 80 años programando pueden haber casos en los que tareas triviales te resulten más dificiles que otras que son más complicadas o es en mi caso... pero dale tampoco pregunte cuanto es 2 + 2... saludos!


Gracias a los 4, voy a hacerlo como dijo four usando diff probe un poco y parece que funciona...
« Última modificación: 9 Febrero 2020, 18:26 pm por MiguelCanellas » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Matemáticas][?] No se hacer esta operacion[Resuelto] « 1 2 3 4 5 »
Dudas Generales
anonimo12121 49 26,508 Último mensaje 6 Febrero 2011, 23:32 pm
por Edu
operación matematica en php. INCREIBLE!!
PHP
OssoH 5 1,682 Último mensaje 16 Septiembre 2015, 09:13 am
por OssoH
Matemática, ¿cómo puedo mejorar velocidad de hacer cuentas ?
Foro Libre
GGZ 4 2,067 Último mensaje 11 Noviembre 2017, 13:44 pm
por PalitroqueZ
Leer archivo .txt y hacer operación matemática
Scripting
rafaeljoseyepez 2 1,628 Último mensaje 21 Junio 2020, 20:39 pm
por rafaeljoseyepez
operacion matemática ¿¿?¿?¿?
PHP
OssoH 2 1,403 Último mensaje 24 Febrero 2021, 11:13 am
por OssoH
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines