需求:
根据日期获取该日期所在的年、周
需求细节:
1.每年的第一个星期日所在的周当作该年的第一周
2.周的定义:周日~次周六
实现方法(PHP):
<?php
/**
* 根据日期获取该日期所在的年、周
*/
function getWeekByDate($date) {
$currentYear = date('Y', strtotime($date));
$firstSunday = '';
for ($i=0; $i < 7; $i++) {
if (date('w', strtotime("+{$i} days", strtotime("{$currentYear}-01-01"))) == 0) { //该年第一个周日
$firstSunday = date('Y-m-d', strtotime("+{$i} days", strtotime("{$currentYear}-01-01")));
break;
}
}
list($currentSunday, $currentSaturday) = getWeekDateRangeByDate($date);
$year = '';
$week = '';
if ($currentSunday < $firstSunday) { //周数归到上一年,递归再调一次该该方法
list($year, $week) = getWeekByDate($currentSunday);
} else {
$year = $currentYear;
$dayDiff = day_diff($firstSunday, $currentSunday);
$week = ($dayDiff / 7) + 1;
}
return array($year, $week);
}
/**
* 根据指定日期获取所在周的日期范围
*/
function getWeekDateRangeByDate($date) {
if (!$date) {
$date = date('Y-m-d');
}
$currentDay = date('w', strtotime($date));
$firstDateTime = strtotime("$date - $currentDay days"); //周日作为一周的第一天
$firstDate = date('Y-m-d', $firstDateTime);
$lastDateTime = $firstDateTime + 6 * 86400;
$lastDate = date('Y-m-d', $lastDateTime);
return array($firstDate, $lastDate);
}
?>