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

週番号は2桁である必要があることに注意してください。

残念なことに、DateTime::createFromFormatPHP 5 の新しい日付処理方法は、この種の情報を解析できないようです。「週」プレースホルダーがありません。

于 2011-04-23T09:27:36.277 に答える
2
  • $week: 週番号
  • $year:年号

それで:

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

これは、 ISO 8601 によると、年の最初の週は 1 月 4 日を含む週である4 + 7*($week - 1)という事実に由来します。

于 2011-04-23T09:17:09.827 に答える
0

strtotime('1/1/2011 + 4 weeks')(1/1 は常に第 1 週です。これにより、第 5 週になります)。週のタイムスタンプが必要な場合は、それで十分です。それ以外の場合は、今週の月曜日に移動する必要があります。

$t = strtotime('1/1/2011 + 4 weeks');
$t -=  24 * 60 * 60 * date('w', $t);

更新: 2011 年の最初の月曜日を使用する代わりに、1/1/20112 番目の計算はもう必要ありません。

于 2011-04-23T09:16:13.887 に答える