1

私はしばらくの間、この問題の解決策を探していました。

私のコードでは

$start_date = date("Ymd", strtotime('this friday'));
$end_date = date("Ymd", strtotime('this sunday'));

昨日(日曜日)、出力が正しくないことに気付きました。PHPは日曜日に週を始めるようですか?月曜から始めたいと思います。したがって、毎週、月曜日から日曜日まで、start_date は今週の金曜日を出力し、end_date は今週の日曜日を出力する必要があります (これが、「今週の金曜日」と「今週の日曜日」を使用した理由です)。

これはタイムゾーンの問題ですか?date_default_timezone_set('Europe/Amsterdam');コードの上に追加すると、問題は解決しますか?

問題は、再び日曜日になるまで待たない限り、これをテストする方法が本当にわからないということです:-)

4

3 に答える 3

4

php は、指定しない限り今日の日付から開始するため、昨日の日曜日から開始されます。

if (date("w")==1){$start_monday = date("Y-m-d");}else{$start_monday = date("Y-m-d", strtotime('last monday'));}

$start_date = date("Y-m-d", strtotime($start_monday.' this friday'));
$end_date = date("Ymd", strtotime($start_monday.' this sunday'));
于 2013-06-17T12:08:13.167 に答える
1

ISO8601には月曜日から日曜日までの週があり、PHP のDateTimeクラスはこの標準に対応できます。

基本的に、現在の日付に ISO8601 の週番号を設定し、必要な日を月曜日から日曜日に 1 から 7 に設定する必要があります。たとえば、次のようになります。

$startDate = new \DateTime();
$startDate->setISODate((int)$startDate->format('Y'), (int)$startDate->format('W'), 1);

$endDate = new \DateTime();
$endDate->setISODate((int)$startDate->format('Y'), (int)$startDate->format('W'), 5);

var_dump($startDate->format('D'));
var_dump($endDate->format('D'));

出力:-

string 'Mon' (length=3)
string 'Fri' (length=3)

詳細についてはリンク先のドキュメントを読み、さらに説明が必要な場合はコメントしてください。

于 2013-06-17T13:11:22.213 に答える