Я знаю, что эта тема старая, но это более короткий способ сделать это с помощью оператора elvis и выражения "+7 day" для strtotime ():
$week=date("W",strtotime(date("w")==1?"+7 day":"+0 day"));
если $ date ("w") возвращает истину, означает, что сегодня день между вторником и воскресеньем (1-6), поэтому мы можем вернуть сегодня неделю ('сегодня').
если возвращает false, это означает, что сегодня понедельник (0), поэтому мы должны вернуться на следующий день («+1 неделя»).
Таким образом, нам не нужно заботиться о последнем или первом дне года или проверять, есть ли в текущем году 52 или 53 недели.
Отредактировано: предыдущий ответ (и другие в этой теме) не работает в этом году, потому что январь 1-й - понедельник, поэтому он должен быть 1 неделю назад (-1 неделя), за исключением воскресенья (день 6).
date("W",strtotime(date("w")?'-7 day':'+0 day'));
Я думаю, что условие, спрашивающее, будет ли 1 января января понедельник, может сработать, но я еще не тестировал его, я вернусь с ответом позже
Для индивидуального дня вы можете использовать это:
$date = strtotime('2018-04-30'); // (it is monday)
if(date("w",strtotime(date('Y',$date).'-01-01'))==1){ // if first day of year is monday
$week = strtotime(date('w',$date)?"-7 day":"+0 day",$date); // and today is sunday, sub a week
$week = date("W",$week);
}else{ // if is not monday
$week = strtotime(date('w',$date)==1?"+7 day":"+0 day",$date); // and today is monday, add a week
$week = date("W",$week);
}
person
stramin
schedule
30.04.2018