PHP-如何检查一年是否为二等分(即闰年)?

PHP-如何检查一年是否为二等分(即闰年)?,php,Php,如何在php中检查一年是否为二等分(即闰年)?您可以使用php的函数来执行此操作 // L will return 1 if it is a leap year, 0 otherwise echo date('L'); // use your own timestamp echo date('L', strtotime('last year')); // for specific year $year = 1999; $leap = date('L', mktime(0, 0, 0, 1,

如何在php中检查一年是否为二等分(即闰年)?

您可以使用php的函数来执行此操作

// L will return 1 if it is a leap year, 0 otherwise
echo date('L');

// use your own timestamp
echo date('L', strtotime('last year'));

// for specific year
$year = 1999;
$leap = date('L', mktime(0, 0, 0, 1, 1, $year));
echo $year . ' ' . ($leap ? 'is' : 'is not') . ' a leap year.';
让我知道如果这对你有帮助,干杯


更新:添加了特定年份的示例对分年是闰年的另一个名称。使用
L
格式化程序,其中
$year
是您测试的年份:

echo (date('L', strtotime("$year-01-01")) ? 'Yes' : 'No');
要调整 《朱利安历法和季节》 使用日历计算 希腊天文学家索斯基尼和他 基于采用365.25天 年份:3年365天,之后是 a每年366天,补充日 始终在 2月(六日)卡伦达斯马蒂斯 =三月日历前的第六天)被称为 第六天之二),因此 二等分年和二等分日 闰日。这一年分为12年 月,31和30交替出现 白天和二月,在正常情况下 年,29天和30天平分 年

后来到了第八个月 献给奥古斯都皇帝 (8月),本月由31个月组成 与七月、月份相匹配的天数 献给朱利叶斯·凯撒。这就是为什么 二月由28天组成,有 平分年29天

使用该类:


检查年份是否为闰年的问题是,是否使用了儒略历或公历

同时,儒略历的年份为365,25,公历的年份为3652422。所以,公历年比朱利安年短11分钟。闰年的一般规则(年份/4必须是整数)并非始终有效

Year/4
Year/100 & Year/400
因此,大多数年份的年份/100不是闰年

此外,这项检查还有另一个重要条件

Year >= 1583
由于1582年被要求使用公历,而今年又受到公历开始使用所引起的变化的影响(10月4日星期四和10月15日之间的天数被删除),1583年是第一个完全按公历计算的年份(在公历中)。但我决定不测试这个条件,因为这个条件可能应该在闰年测试之前测试——如果不确定年份是否按照公历计算的话


对于这两种日历,都可以编写自己的函数(或独立的静态方法),并且结果可能与使用PHP类时相同

而且,使用您自己的函数/方法将需要更短的代码

public static function Is_LeapYear($Year = 1583)
{
    $LeapYear = FALSE;

    if(CheckTypes::Is_Integer($Year / 4))
    {
        if(CheckTypes::Is_Integer($Year / 100) && !CheckTypes::Is_Integer($Year / 400))
        {
            $LeapYear = FALSE;
        }
        else
        {
            $LeapYear = TRUE;
        }
    }
    else
    {
        $LeapYear = FALSE;
    }

    return $LeapYear;
}
CheckTypes
是我自己的多类型检查类(否则方法允许多类型检查)
Is_Integer
Is(由于一种类型检查)等于PHP内置函数中的
Is_Integer
。因此,
CheckTypes::Is_Integer($Year/4)
可以替换为
Is_Integer($Year/4)
,结果将是相同的


闰年的计算是根据公历而不是朱利安历进行的。

如果您关心性能,那么更快的方法是:

!($year % 4) && ($year % 100 || !($year % 400))
它返回的结果与以下结果完全相同:

(bool) date('L', mktime(0, 0, 0, 1, 1, $year))

从101年到999999年,速度大约快30倍。

如果年份可以被4(或400)整除,那么年份就是“闰年”,但不是100。让你知道,2400年将返回0。所以它失败了。请注意,这段代码比这里给出的其他代码(使用日期转换)快4.9倍,并且从101年到9999年输出完全相同的结果。这不是一个很好的解决方案,因为它需要太多的代码来完成这么简单的事情,但是为了认可你惊人的研究工作,它被提升了。
$isLeapYear = fn($year) => $year % 400 === 0 || ($year % 100 !== 0 && $year % 4 === 0)
(bool) date('L', mktime(0, 0, 0, 1, 1, $year))
$isLeapYear = fn($year) => $year % 400 === 0 || ($year % 100 !== 0 && $year % 4 === 0)