Как рассчитать високосные годы в php?

Я пытался составить формулу для расчета високосных лет, но кажется, что она не работает, и я не совсем понимаю, почему.

<?php

    $y = 2019;
    $y = 2020;
    $y = 2300;

    if($y % 4 == 0 and ($y % 100 != 0 and $y % 400 ==0)) echo 'Sí es bisiesto';
    else echo "No es bisiesto";
?>

Я не вижу, где у меня ошибка.

1
задан 29.11.2019, 23:51
4 ответа

Эта неудача ты имеешь по отношению к нему ошибкой lГіgica в cГіdigo

if($y%4==0 and ($y%100!=0 and $y%400==0))

вместо того, чтобы использовать and подходящее он or, потому что то, что ты ищешь, состоит в том, чтобы он показал тебе, если он високосный, или не А именно мы используем or.

1
ответ дан 01.12.2019, 10:34

Хороший я это реализовывал, таким образом:

if (($y%4 == 0 && $y%100 != 0) || $y%400 == 0)

В этом случае группировал ($y%4 == 0 && $y%100 != 0) и с or в $y%400 == 0

, Хотя хороший в твоем случае tambiГ©n оно функционирует просто с or следующей формы:

if ($y%4==0 or ($y%100!=0 and $y%400==0))
1
ответ дан 01.12.2019, 10:34

Ты можешь использовать факт, что PHP уже считает определенной концепцию "aГ±o високосный" в ней librerГ - в Date, так как допускает carГЎcter L как parГЎmetro цепи, чтобы показывать (booleano), aГ±o или нет високосным ли один:

L Si один aГ±o високосный 1, если его високосным, 0, если нет. Следовательно, просто говорится о том, чтобы говорить

:

echo (date('L', strtotime("$y-01-01")) ? 'bisiesto' : 'no bisiesto');
//          ^

то, что является тем же самым, что и говорить:

if (date('L', strtotime("$y-01-01")) {
     echo 'bisiesto';
} else {
     echo 'no bisiesto';
}

NГіtese конечно, что ты cГіdigo serГ - в $y%4 == 0 && ($y%100 != 0 || $y%400 == 0). А именно, "or" внутри parГ©ntesis и не "and". Потому что нет ningГєn nГєmero, что не был mГєltiplo 100, но sГ - он это был 400.

0
ответ дан 01.12.2019, 10:34

AquГ - эта funciГіn, тот же самый возвращает 1, если он високосный aГ±o.

function esBisiesto($year=NULL) {
    $year = ($year==NULL)? date('Y'):$year;
    return ( ($year%4 == 0 && $year%100 != 0) || $year%400 == 0 );
}
0
ответ дан 01.12.2019, 10:34

Теги

Похожие вопросы