我想将日期分组为一周的编号和年份,然后将该周编号转换回Unix时间戳。我该如何实现?
我假设您正在使用ISO 8601周数,并希望ISO 8601周的第一天,以便例如2011年第1周
返回2011年1月3日
。
strtotime
可以使用{YYYY}W{WW}
格式轻松实现此功能:
echo date("Y-m-d", strtotime("2011W01")); // 2011-01-03
请注意,周数需要是两位数。
可悲的是,用于处理日期的新型PHP 5函数DateTime::createFromFormat
似乎无法解析这种信息——它没有“周”占位符。
DateTime :: createFromFormat()
的注释今天仍然是正确的,但我想补充说,您仍然可以使用DateTime:new DateTime('2011W01')
确实有效。 - Dennis98$week
:周数$year
:年份因此:
$timestamp = gmmktime (0, 0 , 0 , 1, , 4 + 7*($week - 1), $year);
4 + 7*($week - 1)
"这个式子来源于ISO 8601标准,根据该标准,一年中的第一周是包含1月4日的那一周。"mktime()
或gmmktime()
来代替strtotime()
。 - James Cstrtotime('1/1/2011 + 4 weeks')
(1/1始终在第一周; 这将使我到达第五周)。如果您想要本周中的任何时间戳,那么这就是您所需的全部内容,否则您将不得不到达本周的星期一:
$t = strtotime('1/1/2011 + 4 weeks');
$t -= 24 * 60 * 60 * date('w', $t);
更新:不再使用1/1/2011
,而是使用2011年的第一个星期一。第二个计算不再需要。