答案 0 :(得分:41)
function getIsoWeeksInYear($year) {
$date = new DateTime;
$date->setISODate($year, 53);
return ($date->format("W") === "53" ? 53 : 52);
}
o
日期格式提供 ISO-8601年号。我们可以使用此功能,并且“无效”日期会自动滚动以生成有效日期(2011-02-31
给出2011-03-03
),以确定给定年份是否有53周。如果没有,那么它必须有52。
答案 1 :(得分:32)
在ISO-8601规范中,它说 12月28日总是在同一年的最后一周。
基于此,我们可以简单地创建该日期,并查看它在哪一周:
$dt = new DateTime('December 28th');
echo $dt->format('W'); # 52
$dt = new DateTime('December 28th, 2009');
echo $dt->format('W'); # 53
...或者如果您使用date()
和strtotime()
函数: echo date('W', strtotime('December 28th')); # 52
答案 2 :(得分:13)
答案 3 :(得分:2)
答案 4 :(得分:1)
echo getLastWeekOfYear(2015);
function getLastWeekOfYear($year) {
$date = new DateTime();
return date('W', strtotime(date('Y-m-d', strtotime($date->setISODate($year, 1, "1")->format('Y-m-d') . "-1day"))));
}
答案 5 :(得分:0)
使用 strtotime(),您可以算到2037年导致2038 bug
要确保计算一年中的所有星期,必须从12月28日开始计算,因为这肯定是该年最后一周中的唯一一天。
<?php
for($year=2018;$year<2038;$year++) {
echo $year.' => ' .date("W",strtotime('28th December '.$year)) .' Weeks<br>';
}
?>
结果: