时间:2010-07-23 15:02:35

标签: php

6 个答案:

答案 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。

另请参阅date format charactersDateTime::setISODate()手册页。

答案 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

demo

...或者如果您使用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>';
}
?>

结果:

  • 2018 => 52周
  • 2019 => 52周
  • 2020 => 53周
  • 2021 => 52周
  • 2022 => 52周
  • 2023 => 52周
  • 2024 => 52周
  • 2025 => 52周
  • 2026 => 53周
  • 2027 => 52周
  • 2028 => 52周
  • 2029 => 52周
  • 2030 => 52周
  • 2031 => 52周
  • 2032 => 53周
  • 2033 => 52周
  • 2034 => 52周
  • 2035 => 52周
  • 2036 => 52周
  • 2037 => 53周