【发布时间】:2014-03-11 14:17:02
【问题描述】:
我想从同月的星期一开始到星期天结束的月份中获取星期。 我会提供月份和年份。 例如:
$month = '03';
$year = '2014';
然后函数应该返回
2014-03-03 to 2014-03-09 作为月份的开始日期,因为该月的第一个星期一是 3 号。
然后继续一个月直到上周。
2014 年 3 月,第 31 日从星期一开始,但不会在 3 月结束,它会在 2014 年 6 月 4 日结束,因此不应计入。
现在,当我将月份传递为“04”时,该月份的第一周应计为 3 月 31 日。
我希望我说清楚,对不起语言。 到目前为止我已经尝试过:
$month = "04";
$year = "2014";
$beg = (int)date('W', strtotime("first day of $year-$month"));
$end = (int)date('W', strtotime("last day of $year-$month"));
$weeks = range($beg, $end);
foreach($weeks as $week) {
$result = $this->getStartAndEndDate($week, $year);
print_r($result);
}
function getStartAndEndDate($week, $year)
{
$time = strtotime("1 January $year", time());
$day = date('w', $time);
$time += ((7*$week)+1-$day)*24*3600;
$return[0] = date('Y-m-d', $time);
$time += 6*24*3600;
$return[1] = date('Y-m-d', $time);
return $return;
}
输出:
Array
(
[0] => 2014-03-03
[1] => 2014-03-09
)
Array
(
[0] => 2014-03-10
[1] => 2014-03-16
)
Array
(
[0] => 2014-03-17
[1] => 2014-03-23
)
Array
(
[0] => 2014-03-24
[1] => 2014-03-30
)
Array
(
[0] => 2014-03-31
[1] => 2014-04-06
)
Array
(
[0] => 2014-04-07
[1] => 2014-04-13
)
【问题讨论】:
-
为什么它在一种情况下应该来自 31.03。在另一个不是从 24.02 开始。 (一周于 02.03 结束。) - 那么你究竟是如何解决“重叠月份”的?另外,您当前的代码在哪里让您失望?
-
@kingkero 没错,它不仅仅是一个案例,它只是一个例子......
-
在上面的输出中,我不想要最后两个数组。也 2014-03-31 应计入 2014 年 4 月(04)