8

$monthToGet = 'June' の場合に、次の PHP strtotime 関数が月番号として '06' ではなく '07' を返す理由に困惑しています。

$monthToGet = $_GET['mon'];
$monthAsNumber = date('m', strtotime($monthToGet));

検索すると、デフォルトの日付パラメーター (この場合は日と年) が原因である可能性があります。指定していないためです。それが原因でしょう?

どんな提案でも大歓迎です!

4

3 に答える 3

5

TL;DR

あなたが正しいです

echo date("m", strtotime("June"));
-> 07

ただし、これは機能します。

echo date("m", strtotime("1. June 2012"));
-> 06

問題の説明

今日は31. July 20121 か月しか指定していないため、現在の日と現在の年を使用して有効な日付が作成されます。

ドキュメントを参照してください:

ノート

この関数は、英語の日付形式を含む文字列が与えられることを期待し、その形式を解析して Unix タイムスタンプ (1970 年 1 月 1 日 00:00:00 UTC からの秒数) に変換しようとします。 now が指定されていない場合は現在の時刻。

代替案

date_parse_from_format()またはを使用strptime()して、わずかに異なるアプローチで目的を達成することができます。

(情報を提供してくれた johannes_ と johann__ に感謝します)

于 2012-07-31T13:18:40.657 に答える
1

で修正:

$monthToGet = '1 '. $_GET['mon'];

しかし、「m」は有効な日付形式であるため、理由はまだわかりません

于 2012-07-31T13:22:10.873 に答える
1

今日は 7 月 31 日です。したがって、strtotimewith onlyは=>"June"と解釈されます。31 June1 July

実際には:

echo date("Y-m-d",strtotime("January"));  // 2012-01-31
echo date("Y-m-d",strtotime("February")); // 2012-03-02

もちろん...のみtoday 31 Jul 2012:)明日はすべてうまくいきます。

今日このバグを発見したあなたは幸運です ;)

于 2012-07-31T13:37:06.140 に答える