Ответ 1
Это должно работать.
function findweek($date, $type = "l") {
$time = strtotime($date);
return date($type, mktime(0, 0, 0, date("m", $time) , date("d", $time)-date("d", $time)+1, date("Y", $time)));
}
echo findweek('2015-09-16');
Я хочу установить первый день недели в четверг (не в воскресенье или в понедельник), потому что это дата отсечения компании.
У меня уже есть код для определения текущего номера недели, но он начинается в воскресенье или понедельник.
Как изменить их в моих предпочтениях?
function findweek($date) {
$monthstart=date("N",strtotime(date("n/l/Y",strtotime($date))));
$newdate=(date("j",strtotime($date))+$monthstart)/7;
$ddate=floor($newdate);
if($ddate != $date) {
$ddate++;
}
return $ddate;
}
Это должно работать.
function findweek($date, $type = "l") {
$time = strtotime($date);
return date($type, mktime(0, 0, 0, date("m", $time) , date("d", $time)-date("d", $time)+1, date("Y", $time)));
}
echo findweek('2015-09-16');
http://php.net/manual/en/datetime.formats.relative.php говорит, что с PHP версии 5.6.23, 7.0.8 "Недели всегда начинаются в понедельник. Раньше, воскресенье также считаться начавшим неделю". Тем не менее, ваша проблема в том, что количество возвращенных недель может быть неправильным в зависимости от того, наступает ли сегодня четверг или до четверга текущей недели? Возможно, попробуйте что-то вроде этого:
$date = new DateTime();
$week = intval($date->format('W'));
$day = intval($date->format('N'));
echo $day < 4 ? $week-1 : $week;
Если вычесть 1, это не ответ, который вы могли бы сыграть с добавлением/вычитанием, сравнивая результат с фактическим ответом, который, как вы знаете, будет истинным, пока не получите правильную формулу. Надеюсь, это поможет!