Я пытаюсь получить номер месяца в году по числу недель года и года. Так, например, 1-я неделя в январе и возвращается 1, неделя 6 в феврале, поэтому я хочу 2.
Я попытался пойти с date_parse_from_format('W/Y')
но не имел успеха (он дает мне ошибки).
Есть ли способ пойти с date_parse_from_format()
или есть другой способ?
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
, следовательно, ошибки.
strtotime
отмечает Что-то вроде этого будет делать, это также проверено и работает:
function getMonthByNumber($number,$year) { return date("F",strtotime('+ '.$number.' weeks', mktime(0,0,0,1,1,$year,-1))); } echo getMonthByNumber(27,2011);
Надеюсь это поможет