web-dev-qa-db-ja.com

週番号と年をUNIXタイムスタンプに変換する方法は?

日付を週番号と年にグループ化しようとしていますが、その週番号をUNIXタイムスタンプに戻したいのですが。これを行うにはどうすればよいですか?

32
blacktie24

私はあなたが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

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

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

86
Pekka 웃
  • _$week_:週番号
  • _$year_:年数

次に:

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

4 + 7*($week - 1)ISO 8601に準拠 であり、年の最初の週は1月4日を含む週です。

2
Oswald

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

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

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

0
Florian