Php 一年中的每个月?

Php 一年中的每个月?,php,datetime,math,calendar,Php,Datetime,Math,Calendar,我试图通过一年中一周的数量和一年中一周的数量得到一年中一个月的数量。 例如,第1周在一月,返回1,第6周在二月,所以我想要2 我试图使用date\u parse\u from\u format('W/Y')但没有成功(它给了我错误) 有什么方法可以从格式()解析日期还是有其他方法 print date("m",strtotime("2011-W6-1")); (注意,2011年1月有六个星期,所以第六周(根据某些定义)是在第1个月)。类似的方法也可以,这也经过测试并有效: function g

我试图通过一年中一周的数量和一年中一周的数量得到一年中一个月的数量。 例如,第1周在一月,返回1,第6周在二月,所以我想要2

我试图使用
date\u parse\u from\u format('W/Y')
但没有成功(它给了我错误)

有什么方法可以从格式()解析日期还是有其他方法

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

(注意,2011年1月有六个星期,所以第六周(根据某些定义)是在第1个月)。

类似的方法也可以,这也经过测试并有效:

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

echo getMonthByNumber(27,2011);

希望这有帮助

我只是想为第一个答案添加注释,从第1周到第9周的周数应该是01-09(如果不添加前导零,它将始终给出第1个月)


使用PHP DateTime对象(这是处理日期的首选方法,有关更多信息,请参见下面的链接),您可以通过以下方式完成:

$dateTime = new \DateTime();
$dateTime->setISODate($year,$week);
$month = $dateTime->format('n');
请注意,以下内容不适用于“W”周:

此方法所使用的格式是您试图使用
date\u parse\u from\u format
,因此会出现错误


您打算如何处理从一个月开始到另一个月结束的周?如果这有意义的话,它们应该属于开始的月份。确切地说,您想使用哪一个?周编号系统
日期('W')
返回。这是ISO-8601,从周一开始。错误,如果我们在这个时候(2017-01-19)测试,这个函数永远不会返回第2个月的正确周!
$dateTime = new \DateTime();
$dateTime->setISODate($year,$week);
$month = $dateTime->format('n');
$month = \DateTime::createFromFormat("W/Y ", "1/2015")->format('n');