PHP-如何检查一年是否为二等分(即闰年)?
如何在php中检查一年是否为二等分(即闰年)?您可以使用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,
// 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)