在PHP中查找当前日期在总周数范围内的周数
我有一个18周的时间表和开始日期: 总周数=在PHP中查找当前日期在总周数范围内的周数,php,date,datetime,range,Php,Date,Datetime,Range,我有一个18周的时间表和开始日期: 总周数=18 开始日期=9/1/20 我想随时知道哪一周的数字(不是PHPW,而是介于1和18之间的实际数字)。因此,我将传递到一个函数:当前日期,开始日期和总周数,它将输出当前周数1到18 我有一个看起来非常复杂的方法,但它不能准确地告诉我周数 function get_current_week($current_datetime, $start_date, $total_weeks) { $date = date('Y-m-d', str
18
开始日期=9/1/20
我想随时知道哪一周的数字(不是PHPW
,而是介于1和18之间的实际数字)。因此,我将传递到一个函数:当前日期
,开始日期
和总周数
,它将输出当前周数1到18
我有一个看起来非常复杂的方法,但它不能准确地告诉我周数
function get_current_week($current_datetime, $start_date, $total_weeks) {
$date = date('Y-m-d', strtotime($current_datetime));
$day_of_week = date('N', strtotime($current_datetime));
$today = new DateTime($date);
$begin = new DateTime($start_date);
$i = 0; // first week number
$end_date = clone $begin;
$end_date->modify($gl_total_weeks . ' weeks');
$interval = new DateInterval('P1W');
$range = new DatePeriod($begin, $interval, $end_date);
$dates = array();
$found = false;
foreach($range as $date) {
if($date >= $today && !$found) {
$found = true;
$current_week = ($day_of_week >= 2 ? $i : $i -1);
}
$dates['Week ' . $i] = $date->format('Y-m-d');
$i++;
}
if (!$current_week) {
$current_week = 1;
}
return $current_week;
}
谢谢你的帮助。没有日期间隔,一切都会变得简单。只需要从开始日期到当前日期的天数差。剩下的是一些数学。开始日期在内部设置为每周的星期一。结束日期不受控制。每周的计数周期性地继续
function getWeekNumber($current_datetime, $start_date, $total_weeks) {
$curDate = date_create($current_datetime);
$start = date_create($start_date)
->modify('+1 day')
->modify('last Monday')
;
$totalDays = $total_weeks * 7;
$dayDiff = $start->diff($curDate)->days;
return (int)(($dayDiff%$totalDays)/7+1);
}
注:周数从1开始计算。从0开始计数时,只需删除返回行中的+1。你的意思是当前周数为4,下周将为5吗?date\u格式('W')%18
或类似格式有什么问题?@Alex Barker:对于date\u格式('W'),如果结束日期在下一年,则会出错。哦,伙计,这更优雅。我喜欢。非常感谢。