誰かが私にこれらの2つが異なる結果を与える理由を親切に説明できますか?
これをPHPで実行します。
date("YW",mktime(0, 0, 0, 3, 22 , 2013)); // outputs 201312
そしてこれをMySQLで実行すると
SELECT YEARWEEK(now()); // outputs 201311
誰かが私にこれらの2つが異なる結果を与える理由を親切に説明できますか?
これをPHPで実行します。
date("YW",mktime(0, 0, 0, 3, 22 , 2013)); // outputs 201312
そしてこれをMySQLで実行すると
SELECT YEARWEEK(now()); // outputs 201311
mysqlYEARWEEK呼び出しでモード3を指定する必要があります。
SELECT YEARWEEK(now(),3);
PHPdate()
プレースホルダーは、 ISO8601仕様W
に従って週番号を返します。つまり、週は月曜日(日曜日ではなく)に始まり、その年の最初の週は1番(0ではない)であり、その週は新年の半日以上の最初の週です(したがって、1月である必要があります)。木曜日までに)。MySQL WEEK関数のドキュメントによると、オプションの組み合わせはモード3です。
また、重要であるため、Allesのメモを受け入れられた回答に取り込むこと:プレースホルダーY
とW
一緒にしないでください。ISOの週番号と一致する年が必要な場合は、のo
代わりにを使用する必要がありY
ます。たとえば、2014年12月29日月曜日から始まる週について考えてみます。
date('YW', mktime(0,0,0,12,29,2014)); #=> 201401 : 1st week of 2014??
date('oW', mktime(0,0,0,12,29,2014)); #=> 201501 : better
YEARWEEK( '2012-01-01'、3)=> 201152であることに注意してください。一方、PHP "YW"は201252を返します。結果の年は、最初と最後の日付引数の年と異なる場合があります。今年の週。(つまり、YEARWEEKの年は週の月曜日の年であり、計算に使用される日付の年ではありません)。
正しい結果を得るには、次のことを行う必要があります
date("oW",mktime(0, 0, 0, 1, 1, 2012)); // outputs 201152
「o」はその週が属する年を示します。
これがお役に立てば幸いです。
YEARWEEK
週の範囲[0-53]または[1-53]を指定する2番目の(オプションの)パラメーターを取ります。
この関数は、日付の週番号を返します。WEEK()の2つの引数形式を使用すると、週が日曜日と月曜日のどちらで始まるか、および戻り値を0から53または1から53の範囲にするかどうかを指定できます。mode引数を省略した場合、値default_week_formatシステム変数のが使用されます。
whiledate(W)
は、常に[01-53]の範囲にあるISO8601の日付です。したがって、私の推測では、デフォルトでYEARWEEKは[0-53]の範囲を使用しています。
したがって、同じ結果を取得したい場合は、2番目のパラメータとして1を使用してみてください。YEARWEEK