获得通过月和年的PHP周数

时间:2012-01-27 18:08:08

标签: php date

我知道有很多像这样的问题,但我不知道我是盲人还是什么,但我找不到符合我问题的答案,所以就这样吧。

我有2个组合框 - monthyear,我需要一个功能,可以从我选择的月份和年份中获取周数。

示例:

我选择日期02/2012(m / yyyy),组合将带来属于我选择的月份的周数。 (一年中的几周)。

周:

5, 6, 7, 8, 9


我的主要目标是将周数传递给另一个函数以获得本周的日期,就像这个函数的返回一样:

$week_number = 40;
$year        = 2012;

if($week_number < 10){
   $week_number = "0".$week_number;
}

for($day=1; $day<=7; $day++)
{
    echo date('m/d/Y', strtotime($year."W".$week_number.$day))."<br/>";
}

不知道我是否清楚自己,但是,我的客人有任何问题。

感谢。


简历:

一年52周

如果我选择月份2,该函数应返回5, 6, 7, 8, 9

2 个答案:

答案 0 :(得分:12)

我认为你应该可以使用它吗?

$month = "2";
$year = "2012";

$beg = (int) date('W', strtotime("first thursday of $year-$month"));
$end = (int) date('W', strtotime("last  thursday of $year-$month"));

print(join(', ', range($beg, $end)));

<强>输出

5, 6, 7, 8

注意

此代码有问题,并且在2014年8月27日修复之前产生了错误的结果。

一周所属的时间段取决于其中大多数(四个或更多)的日期。这最简单的方法是通过检查 Thursday 落在何处。因此,一个月的第一周和最后一周是包含其第一个和最后一个星期四的那些星期。

答案 1 :(得分:2)

首先,获取每月/每年第1天的时间戳。并在此基础上,获取第一天的周数。

像这样:

$year = "2012";
$mon = "02";

$tm = strtotime("$year-$mon-01");  # Substitue year and month 
$first_week_num = date("W", $tm); # Got the week number

然后在本月的最后一天做同样的事情。为此,您可以简单地在月份中添加1(您需要执行逻辑,如果月份是12 - 您需要在年中添加1)。然后减去86400(每天的秒数)。通过这种方式,您将获得该月的最后一天,而不必费心查找该月的天数。

if($mon == 12) 
   $year++;
else
   $mon++;
$tm = strtotime("$year-$mon-01") - 86400;
$last_week_num = date("W", $tm);

从第一周到上周的所有周都是你需要的:

for($i=$first_week_num; $i <= $last_week_num; $i++)
  print $i;