2017-03-29 9 views
0

私は次の日付を返します(月ごとの選択)。しかし、ユーザーが2月を選択すると、正しく動作しないことがわかりました。これは、日付を取得するために適用され、私のコードです:DateTime :: createFromFormatは、2017-02の形式では正常に動作しません

$dateSelect = @$_GET['datum'] ?: date('Y-m'); 
$date = DateTime::createFromFormat('Y-m', $dateSelect); 
$prevdate = clone $date; 

$date->modify('first day of next month'); 
$this->view->next_month = $date->format('m'); 
$this->view->next_year = $date->format('Y'); 

$prevdate->modify('first day of previous month'); 
$this->view->prev_month = $prevdate->format('m'); 
$this->view->prev_year = $prevdate->format('Y'); 

あなたがより速くそれをテストすることができますので、私は例を作っていますPHP Sandbox

ユーザーが日付2017-02を選択した場合、それは、2017-03として処理され、その間違っています。この例では、値を2017-01に変更してみてください。正しく動作していることがわかります。私のコードのボタンはこれらの値で満たされているので、ユーザは手動でURLを変更することなくFebruary 2017の前に行くことはできません。日時は現在日付に基づいて日付の行方不明d一部を移植れるように

+0

このデフォルトの動作を回避するために、これまでにd一部を強制する必要があります|'(パイプ文字): 'Ymの|' 'のDateTime :: createFromFormat(、 $ dateSelect); '。これにより、曜日と時間が0になります。利用可能な他のそのような文字については、createFromFormat docを参照してください。 – Zimmi

答えて

3

、あなたは効果的に無効である、(今日は29thであることを考えると)2017-02-29を取得しているが、日時はに調整します有効な日付は翌月に転じて2017-03-01となります。

あなたは正しい形式は `であるべき

$date = DateTime::createFromFormat('Y-m-d', $dateSelect . '-01'); 
+0

あなたは正しいですが、私はこれを試していません。ありがとう! – debute

+3

注: '|'(pipe char)の形式を使用することができます: 'DateTime :: createFromFormat( 'Ym |'、$ dateSelect);' – Zimmi

+0

@Zimmi - 本当にクールなチップ、それについては一度も知らなかった –

関連する問題