36

問題の概要は次のとおりです。日曜日に、strtotime('this week')来週の開始を返します。

PHPでは、週は月曜日に始まるようです。ただし、日曜日以外の日は、このコード

echo date('Y-m-d', strtotime('monday this week', strtotime('last sunday')));

先週の月曜日に出力する必要があると思われる、今週の月曜日の日付を出力します。この場合、PHPは日曜日と月曜日の両方を週の始まりとして扱っているようです。現在は、2012年12月10日月曜日、または2012年12月10日です。date('Y-m-d', strtotime('sunday last week'))戻ります2012-12-09-昨日。

これはバグですか、それとも何かが足りませんか?この明らかなバグはかなりよく知られているはずですが、私はそれについて何も見つけることができません。週の始まりを取得して日曜日に特別な処理を使用する唯一の方法はありますか?

$week_offset = (int) 'sunday' == date('l');
$week_start  = strtotime("-$week_offset monday"); // 1 or 0 Mondays ago
4

10 に答える 10

10

私の知る限り、これはバグです。strtotime('this week');将来の日付を返す必要がある論理的な理由はわかりません。これはかなり大きなバグです。私の特定のケースでは、週の初めから最も多くのポイントをユーザーに示したリーダーボードがありました。しかし、日曜日にはstrtotime、将来の日付のタイムスタンプが返されたため、空でした。どうしてこれが見過ごされたのかわからないので、私は疑っていましたが、このバグに関する他の報告は見つかりませんでした。

皆さん、いつもお世話になっております。

于 2012-12-11T19:43:44.587 に答える
7

この答えは遅いですが、それは私が苦労してきたことです。私がこれまでに試したすべての解決策は、何らかの理由で誤動作しています。これは私が私のために働いた結果でした。(見た目はきれいかもしれませんが、少なくとも機能します)。

$thisMonday =  strtotime('next Monday -1 week', strtotime('this sunday'));
于 2015-09-15T11:19:26.973 に答える
6

今週の月曜日を取得する方法は次のとおりです。

echo date("Y-m-d", strtotime(date('o-\\WW')));
于 2013-02-16T22:07:40.820 に答える
3

それは理想的ではありませんが、これは私が使用することに頼ったものです:

if(date('N') == 7) { 
    $date = date('Y-m-d',strtotime('monday last week'));
} else {
    $date = date('Y-m-d',strtotime('monday this week'));
}
于 2015-06-14T13:55:43.953 に答える
1
  I think the only problem with your coding is TimeZone.

解決策:
独自のタイムゾーンを設定します。これが私自身のタイムゾーンの例です:

   date_default_timezone_set('Asia/Kolkata');


   Set the above line before calling any time function.

良い1日を。

于 2014-01-18T22:36:40.543 に答える
0

試してみる代わりに

echo date('Y-m-d', strtotime('monday this week', strtotime('last sunday')));

試してみてください

echo date('Y-m-d', strtotime('monday last week'));
于 2012-12-10T10:06:21.590 に答える
0

このコードを試してください

// set current date
$date = date("m/d/Y");
$ts = strtotime($date); // also $ts = time();

// find the year and the current week
$year = date('o', $ts);
$week = date('W', $ts);
// print week for the current date
$i = 1; // 1 denotes the first day of week

$ts = strtotime($year.'W'.$week.$i);
echo $day = date("l", $ts); // generate the name of day
echo "<br>";
echo $day = date("Y-m-d", $ts); // generate the date

あなたは現在の週の日付を取得します、あなたが月曜日にいるかどうかにかかわらず、あなたはその月曜日の日付を取得します。

于 2012-12-11T05:31:45.900 に答える
0

最新の月曜日が必要な場合:

function mostRecentMonday(){
  if(date("w") == 1){
   return strtotime("midnight today");
  } else {
   return strtotime("last monday");
  }
}

DateTimeを使用するように、またはベースとして使用する別の日付を指定するように簡単に変更できます。

于 2014-01-16T16:50:06.197 に答える
0

ブライアントの回答に基づく:

$first_week_date = date('d F Y', strtotime('next Monday -1 week', strtotime('this sunday')));
$last_week_date = date('d F Y', strtotime('next Monday -1 week + 6 days', strtotime('this sunday')));
于 2017-07-20T18:19:20.450 に答える
0

これは、いつでも機能するフレンドリーなソリューションを探している人のためのものです。

function getWeekStart($week_start_day = "Monday") {
    $week_days = array("Sunday"=>0,"Monday"=>1,"Tuesday"=>2,"Wednesday"=>3,"Thursday"=>4,"Friday"=>5,"Saturday"=>6,);

    if(!isset($week_days[$week_start_day])) {
        return false;
    } else {
        $start_day = $week_days[$week_start_day];

        $today = date("w");
        $one_day = (60 * 60 * 24);

        if($today < $start_day) {
            $days_difference = 7 - ($start_day - $today);
        } else {
            $days_difference = ($today - $start_day);
        }

        $week_starts = strtotime(date("Y-m-d 00:00:00")) - ($one_day * $days_difference);

        return $week_starts;
    }
}

//Test: If today is Monday, it will return today's date
echo date("Y-m-d H:i:s", getWeekStart("Monday"));
于 2018-05-26T12:39:42.240 に答える