如何将周数和年份转换为unix时间戳?

时间:2011-04-23 09:10:10

标签: php strtotime strftime mktime

我正在尝试将日期分组为一周的数字和年份,然后我想将该周数转换回unix时间戳。我怎么能这样做呢?

3 个答案:

答案 0 :(得分:85)

我假设您使用的是ISO 8601周数字,并且想要ISO 8601周的第一天,以便例如Week 1 of 2011返回January 3 2011

strtotime可以使用{YYYY}W{WW}格式开箱即用:

echo date("Y-m-d", strtotime("2011W01")); // 2011-01-03

请注意,周数需要两个数字。

可耻地,DateTime::createFromFormat,处理日期的奇特的新PHP 5方式,似乎无法解析这种信息 - 它没有“周”占位符。

答案 1 :(得分:2)

  • $week:周数
  • $year:年份编号

然后:

$timestamp = gmmktime (0, 0 , 0 , 1, , 4 + 7*($week - 1), $year);

4 + 7*($week - 1)来自according to ISO 8601这一事实,即一年中的第一周是包含1月4日的那一周。

答案 2 :(得分:0)

strtotime('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年的第一个星期一。不再需要第二次计算。