ユーザーが週番号 X を指定しているという単純な状況があり、その週の月曜日の日付 (例: 12 月 12 日) を調べる必要があります。どうすればこれを達成できますか?年と週がわかります。
5 に答える
主に以前の提案に基づくいくつかのコード:
$predefinedYear = 2009;
$predefinedWeeks = 47;
// find first mоnday of the year
$firstMon = strtotime("mon jan {$predefinedYear}");
// calculate how much weeks to add
$weeksOffset = $predefinedWeeks - date('W', $firstMon);
// calculate searched monday
$searchedMon = strtotime("+{$weeksOffset} week " . date('Y-m-d', $firstMon));
始めるためのアイデア:
- 年の最初の日を取る
- 7 * X 日を追加
- strtodate を使用して、「先週の月曜日」と上で計算した日付を渡します。
上記に1日追加する必要がある場合があります。
週番号の計算方法と週の始まりによっては、これが外れる場合があります。(つまり、年の最初の週の月曜日が実際には前年の月曜日だった場合!)
これを徹底的にテストしてください-しかし、私は過去に同様の計算に同様のアプローチを使用しました。
//To calculate 12 th Monday from this Monday(2014-04-07)
$n_monday=12;
$cur_mon=strtotime("next Monday");
for($i=1;$i<=$n_monday;$i++){
echo date('Y-m-d', $cur_mon);
$cur_mon=strtotime(date('Y-m-d', strtotime("next Monday",$cur_mon)));
}
アウトプット
2014-04-07
2014-04-14
2014-04-21
2014-04-28
2014-05-05
2014-05-12
2014-05-19
2014-05-26
2014-06-02
2014-06-09
2014-06-16
2014-06-23
評判の制限により、詳細チェックのために複数のリンクを投稿することはできません
http://php.net/manual/en/function.date.phpおよびhttp://php.net/manual/en/function.mktime.php
次のようなものを使用できます: mktime を使用して、その週のタイムスタンプを取得します: $stamp = mktime(0,0,0,0,<7*x>,) {数年前に似たようなものを使用したので、このように機能するかどうかわかりません}そして、$wDay = date('N',$stamp) を使用します。これで曜日がわかりました。月曜日のタイムスタンプは
mktime(0,0,0,0,<7*x>-$wDay+1,) {'N' パラメータは、月曜日の場合は 1、日曜日の場合は 6 を返します}
お役に立てれば