在PHP中查找当前日期在总周数范围内的周数

在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周的时间表和开始日期:

总周数=
18

开始日期=
9/1/20

我想随时知道哪一周的数字(不是PHP
W
,而是介于
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'),如果结束日期在下一年,则会出错。哦,伙计,这更优雅。我喜欢。非常感谢。