Я пытаюсь получить номер месяца года по номеру недели года и года.Так, например, неделя 1 в январе и возвращает 1, неделя 6 в феврале, поэтому я хочу 2.
Я пытался перейти с date_parse_from_format('W/Y'), но безуспешно (это дает мне ошибки).
date_parse_from_format('W/Y')
Есть ли способ пойти с date_parse_from_format() или есть другой способ?
date_parse_from_format()
print date("m",strtotime("2011-W6-1"));
(отмечая, что в 2011 году в январе шесть недель, поэтому неделя 6 (по некоторым определениям) - в месяце 1).
Используя объекты PHP DateTime (который является предпочтительным способом работы с датами, смотрите ссылки ниже для получения дополнительной информации), вы можете сделать это следующим образом:
$dateTime = new \DateTime(); $dateTime->setISODate($year,$week); $month = $dateTime->format('n');
Обратите внимание, что следующее не будет работать, так как неделя "W" не поддерживается :
$month = \DateTime::createFromFormat("W/Y ", "1/2015")->format('n');
Формат, используемый этим методом , аналогичен поддерживаемому функцией , когда вы пытаетесь использовать date_parse_from_format, отсюда и ошибки.
date_parse_from_format
strtotime
Просто хотел добавить примечание для первого ответа, номер недели должен быть 01-09 для недель с 1 по 9 (всегда будет месяц 1, если вы не добавите ведущий ноль)
date("m",strtotime("2011-W06-1"));
Примерно так и будет, это тоже проверено и работает:
function getMonthByNumber($number,$year) { return date("F",strtotime('+ '.$number.' weeks', mktime(0,0,0,1,1,$year,-1))); } echo getMonthByNumber(27,2011);
Надеюсь, это поможет