32

我正在尝试将日期组合成周数和年份,然后我想将该周数转换回 unix 时间戳。我该怎么做呢?

4

3 回答 3

93

我假设您使用的是 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 处理日期的新方法似乎无法解析此类信息 - 它没有“星期”占位符。

于 2011-04-23T09:27:36.277 回答
2
  • $week: 周数
  • $year: 年份编号

然后:

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

4 + 7*($week - 1)是因为根据 ISO 8601,一年的第一周是包含 1 月 4 日的那一周。

于 2011-04-23T09:17:09.827 回答
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 年的第一个星期一。不再需要第二次计算。

于 2011-04-23T09:16:13.887 回答