有没有办法在给定一个月的 PHP 中获取每周的开始/结束日期? 因此,例如,如果我参加这个月(2011 年 11 月),我需要返回
30 Oct -> 5 Nov
6 Nov -> 12 Nov
13 Nov -> 19 Nov
20 Nov -> 26 Nov
27 Nov -> 3 Dec
乐:
这是我做的,以防其他人需要它。代码不是很漂亮,但它可以满足我的需要。
public function getMonthWeeks($month, $year)
{
$month = intval($month);
if ($month < 1) {
$month = 1;
}
if ($month > 12) {
$month = 12;
}
$tsfdOfMonth = mktime(0, 0, 0, $month, 1, $year);
$dayOfWeek = idate('w', $tsfdOfMonth);
$tIntervalStart = $tsfdOfMonth;
$tNextMonth = idate('m', strtotime("+1 month", $tsfdOfMonth));
if ($dayOfWeek > 0) {
$tStr = sprintf("-%d %s",
$dayOfWeek,
$dayOfWeek == 1 ? 'day' : 'days'
);
$tIntervalStart = strtotime($tStr, $tsfdOfMonth);
}
$resultDates = array();
$tsStart = $tIntervalStart;
$tsEnd = strtotime('+6 days', $tsStart);
while (true) {
$rObj = new stdClass;
$rObj->LinkStr = sprintf("%s %s - %s %s",
date('M', $tsStart), date('d', $tsStart),
date('M', $tsEnd), date('d', $tsEnd)
);
$rObj->DateStart = date('Y-m-d', $tsStart);
$rObj->DateEnd = date('Y-m-d', $tsEnd);
$resultDates[] = $rObj;
if (idate('m', strtotime('+1 day', $tsEnd)) == $tNextMonth) {
break;
}
$tsStart = strtotime('+1 day', $tsEnd);
$tsEnd = strtotime('+6 days', $tsStart);
}
return $resultDates;
}
最佳答案
你必须写一个函数:
算法:
- 获取一个月的第一天。
- 减去到达星期日所需的天数——您现在有该月第一个“星期日”的日期(可能是上个月的最后一个星期日)。
- 加上六天以确定该周的星期六。
- 加一天确定下周星期日。
- 重复 3 和 4 直到我们不再在当月
两个功能非常有用:$saturdaytimestamp = strtotime("+6 days", $sundaytimestamp)
和 $dayofweek = idate('w', $timestamp);
关于php - 如何获取给定月份中每周的日期间隔?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8307805/