Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Calcular si un año es bisiesto

Estas en el tema de Calcular si un año es bisiesto en el foro de PHP en Foros del Web. Hola a todos. Tengo este código para calcular si un año es bisiesto pero no entiendo por que siempre me dice que el año no ...
  #1 (permalink)  
Antiguo 26/11/2013, 09:30
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años
Puntos: 468
Calcular si un año es bisiesto

Hola a todos. Tengo este código para calcular si un año es bisiesto pero no entiendo por que siempre me dice que el año no es bisiesto cuando creo que la fórmula que uso es correcta

Código PHP:
Ver original
  1. <?php
  2. $fano = $_POST['$ano'];
  3.  
  4. if ($fano%4==0 and $fano%100!=0)
  5.     {
  6.     if($fano%400==0) {
  7.     echo $fano . ' SI es un año bisiesto';}
  8.     else
  9.         {
  10.         echo $fano . ' NO es un año bisiesto';
  11.         }
  12.    
  13.     }
  14. else
  15. {
  16. echo $fano . ' NO es un año bisiesto';
  17. }
  18. ?>
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #2 (permalink)  
Antiguo 26/11/2013, 09:39
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 1 mes
Puntos: 96
Respuesta: Calcular si un año es bisiesto

Depuremos, veamos que recibes por post
Código PHP:
Ver original
  1. var_dump($_POST['$ano']);
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #3 (permalink)  
Antiguo 26/11/2013, 09:45
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 3 meses
Puntos: 206
Respuesta: Calcular si un año es bisiesto

El primer IF solo lo pasaría si el año no es divisible entre 100.
En el if interior, comparas si es divisible por 400.
Evidentemente, si un año no es divisible entre 100, mucho menos lo será entre 400.

La fórmula que usas no es correcta. Un año es bisiesto si es divisible entre 4 y no es divisible entre 100. También son bisiestos los años que son divisibles entre 100 y entre 400.
  #4 (permalink)  
Antiguo 26/11/2013, 09:51
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años
Puntos: 468
Respuesta: Calcular si un año es bisiesto

Seguro ??

Segun he leido en varios sitios un año es visiesto si es divisible entre 4 pero no lo es entre 100 pero si no es divisible entre 400. de la forma que lo has dicho, serían dos formulas. Tal vez me equivoque
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #5 (permalink)  
Antiguo 26/11/2013, 09:53
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 3 meses
Puntos: 206
Respuesta: Calcular si un año es bisiesto

Acabas de decir lo mismo que dije yo, expresado de otra manera más enrevesada.
  #6 (permalink)  
Antiguo 26/11/2013, 09:54
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años
Puntos: 468
Respuesta: Calcular si un año es bisiesto

Me muestra:

Código PHP:
Ver original
  1. string(4) "2008"
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #7 (permalink)  
Antiguo 26/11/2013, 10:17
txemaarbulo
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Calcular si un año es bisiesto

Hola rodrypaladin:

Creo que el segundo condicional (if($fano%400==0)) después del primero (if ($fano%4==0 and $fano%100!=0)) nos deja siempre y todo para el último else.

Prueba con este código:

Código PHP:
Ver original
  1. <?php
  2. if (!empty($_POST['ano'])){
  3.   $fano = $_POST['ano'];
  4.   echo $fano.'<br>';
  5.   if (($fano%4==0 and $fano%100!=0) or $fano%400==0){
  6.     echo $fano . ' SI es un año bisiesto';
  7.   } else {
  8.     echo $fano . ' NO es un año bisiesto';
  9.   }
  10. }
  11. ?>
  #8 (permalink)  
Antiguo 26/11/2013, 10:26
Avatar de Trublux  
Fecha de Ingreso: octubre-2010
Ubicación: Madrid
Mensajes: 355
Antigüedad: 13 años, 5 meses
Puntos: 48
Respuesta: Calcular si un año es bisiesto

En la Wikipedia explican muy bien cuando un año es bisiesto (y vienen formas para calcularlo en varios lenguajes de programación):
Cita:
Iniciado por wikipedia
Un año es bisiesto si es divisible entre 4, excepto si es divisible entre 100 pero no entre 400.
En la documentación de la función date de php, al igual que en la wikipedia, en los ejemplos hay una función que devuelve true o false dependiendo de si el año es bisiesto o no:
Código PHP:
Ver original
  1. function isLeapYear($year)
  2. {
  3.     return ((($year%4 == 0) && ($year%100)) || $year%400 == 0)? true: false;
  4. }
__________________
eZ Publish Developer Basic Legacy
eZ Publish Developer Basics (4.4)
Alojamientos rurales en España

Última edición por Trublux; 26/11/2013 a las 10:34 Razón: Añadir enlace
  #9 (permalink)  
Antiguo 26/11/2013, 10:47
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años
Puntos: 468
Respuesta: Calcular si un año es bisiesto

De esa manera funciona a la perfección. Gracias
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #10 (permalink)  
Antiguo 26/11/2013, 11:45
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Calcular si un año es bisiesto

Puedes usar la funcion date para saber si es año bisiesto:
Código PHP:
Ver original
  1. // regresa 1 si es bisiesto
  2. function isLeapYear($date)
  3. {
  4.     return date('L', strtotime($date));
  5. }
  6.  
  7. //ejemplo
  8. if(isLeapYear('2008-06-12')){
  9.  // mas instrucciones
  10. }
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Etiquetas: año, calcular
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:03.