8

今週の月曜日の日付を取得するのに問題があります。

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

上記のコードをローカルマシン(PHP 5.3)で実行すると、正しく「2011-03-07」が出力されますが、サーバー(PHP 5.2)の同じコードは「2011-03-14」(次の月曜日)を出力します。週)。

両方のマシンでdate('W')を実行しようとしましたが、同じ結果が得られました(10)。

編集:これを正しく機能させる方法はありますか?

前もって感謝します。

4

8 に答える 8

8

使用する date('Y-m-d',strtotime(date('o-\\WW')));

于 2012-02-22T10:08:22.313 に答える
5

私はこの問題を正確に見たわけではありませんが、非常によく似た問題を見てきました。strtotimeは、PHPの異なるバージョン間で動作を変更するようであり、単純な操作(たとえば、「+ 1週間」)を除けば、機能が同じままであることを保証することは困難です。

5.3にアップグレードできない場合は、正しく指摘されているように改善されているように見えますが、私がお勧めできるのは、いくつかの順列で遊んでいることだけです。多くの場合、質問を言い換えることで、古いバージョンのstrtotimeから正しい答えを得ることができます。例としては...

  • 次の月曜日-1週間
  • 先週の月曜日+1週
  • この月曜日
于 2011-03-09T15:35:33.607 に答える
3

はい、strtotimeの文字列の解釈は5.3で大幅に改善されました。

于 2011-03-09T15:20:01.277 に答える
0

サーバーとローカルデスクトップのCLIプロンプトからコマンド「date」を実行します。これにより、OSが両方のシステムで同じ日付を認識しているかどうかが確認されます。

于 2011-03-09T15:22:44.217 に答える
0

2つの選択肢があります。日付が将来であるかどうかをチェックするこの機能の使用を避けるか、将来である場合は7日で短縮します。PHPの素晴らしい世界へようこそ。

于 2011-03-09T15:37:31.243 に答える
0

これを見てください:

「2月31日のような非常識な日付を受け入れるため、この関数だけで日付を検証することはできないことに注意してください。

また、「...週」機能自体は、期待どおりに機能しない場合があります。日曜日に使用された場合、「来週」は次の月曜日のタイムスタンプを返しませんが、その後の月曜日のタイムスタンプを返します。同様に、「前/先週」を使用すると、現在の週の月曜日のタイムスタンプが返され、「今週」は翌週(つまり翌日)の月曜日のスタンプを返します。これは「週が日曜日に始まる」効果ではありません。これは、返されるすべてのタイムスタンプが日曜日である必要があり、いずれもそうではないことを意味するためです。」

今日のFfは日曜日です、あなたは間違っているでしょう。

于 2015-03-31T05:34:20.160 に答える
0

これが機能する別の解決策です(実際に私のために機能した唯一の解決策):

$mondayOfWeek = date ('d M Y', strtotime($someDate) - ((date ('N', strtotime($someDate)) - 1) * 3600 * 24));
于 2016-01-24T13:46:27.257 に答える
0
$today = strtotime('This week monday 8 am');
echo $this->unix_timestamp_to_human($today,"D M j G:i:s T Y");
于 2021-05-27T17:37:19.647 に答える