Месяц по неделям года?

Я пытаюсь получить номер месяца в году по числу недель года и года. Так, например, 1-я неделя в январе и возвращается 1, неделя 6 в феврале, поэтому я хочу 2.

Я попытался пойти с date_parse_from_format('W/Y') но не имел успеха (он дает мне ошибки).

Есть ли способ пойти с date_parse_from_format() или есть другой способ?

Related of "Месяц по неделям года?"

 print date("m",strtotime("2011-W6-1")); 

(отметив, что в 2011 году в январе было шесть недель, поэтому неделя 6 (по некоторым определениям) находится в месяце 1).

Просто хотел добавить примечание к первому ответу, номер недели должен быть 01-09 для недель с 1 по 9 (он всегда будет давать месяц 1, если вы не добавите начальный ноль)

 date("m",strtotime("2011-W06-1")); 

Используя объекты PHP DateTime (который является предпочтительным способом работы с датами, см. Ссылки ниже для получения дополнительной информации), вы можете выполнить его следующим образом:

 $dateTime = new \DateTime(); $dateTime->setISODate($year,$week); $month = $dateTime->format('n'); в $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 , следовательно, ошибки.

  • Почему PHP DateTime Rocks
  • Класс DateTime против встроенных функций даты PHP
  • strtotime отмечает
  • Руководство по PHP / архитектору по программированию даты и времени (глава 2)

Что-то вроде этого будет делать, это также проверено и работает:

 function getMonthByNumber($number,$year) { return date("F",strtotime('+ '.$number.' weeks', mktime(0,0,0,1,1,$year,-1))); } echo getMonthByNumber(27,2011); 

Надеюсь это поможет