2017-02-16 10 views
1

私は、現在の日付とx日よりも劣っている場合は別の日付との間の差異が真である場合にtrueを返す関数を作成しました。ここでPHP DateTimeの差分形式は、-0を返します。

は私の関数である。

private function notBeforeDate($date_to_compare, $interval) { 
    $now = new DateTime('now'); 
    $date = new DateTime($date_to_compare); 
    $diff = $now->diff($date)->format("%r%a"); 

    return $diff < $interval ? true : false; 
} 

しかし、私は同じ日付$diffを送信するときにします戻り-0日+1されます0を返します。

例:(現在の日付があると仮定2017- 2月16日):

$this->notBeforeDate('2017-02-15', 1); // $diff = -1 
$this->notBeforeDate('2017-02-16', 1); // $diff = -0 
$this->notBeforeDate('2017-02-17', 1); // $diff = 0 
$this->notBeforeDate('2017-02-18', 1); // $diff = 1 

どのように私は私の$diff変数に良い値を得るために行うことができますか?

$this->notBeforeDate('2017-02-15', 1); // $diff = -1 
$this->notBeforeDate('2017-02-16', 1); // $diff = 0 
$this->notBeforeDate('2017-02-17', 1); // $diff = 1 
$this->notBeforeDate('2017-02-18', 1); // $diff = 2 
+0

いくつかの変更を加えれば問題ありません。 - https://eval.in/738465 –

+0

2017-02-17と2017-02-16は両方とも0を返します。受け取った日付がその日であれば '1'を返します。+1 – John

+0

それを掘り下げることなく、時刻を返すような' DateTime'サウンドもあります。 「今」は私のためにここにあります2017-02-16 13:48魔女は2017-02-16 00:00:00と2017-02-17 00:00:00の両方から一日少ないです。私はあなたの探している日があれば、代わりに「日付」を付けることを提案します。 –

答えて

0

DateTime("now")は、日付と時刻を返します。いつでも「今」と指定された日は、タイムスタンプがいずれの方向にも24時間未満である限り、同じ日または次の日から1日以内になります。問題はこのことでしょう

短い修正、あなたのために:この場合

private function notBeforeDate($date_to_compare, $interval) { 
    $now = new DateTime(Date("Y-m-d")); 
    $date = new DateTime($date_to_compare); 
    $diff = $now->diff($date)->format("%r%a"); 

    return $diff < $interval ? true : false; 
} 

、時間部分は「今」から削除されます。より良い解決策は、時間だけではなく日付を使用するソリューションを作成することです。

例: IF DateTime("now")は「2017-02-16 12:00」を返し、「2017-02-16 00:00:00」と比較して0日-12時間を取得します。また、「2017-02-17 00:00:00」と比較すると、0日+12時間となります。日の差分を求めると、どちらの場合もDayの部分が0になります。

+0

なぜ否定的な投票ですか?その理由は何ですか? –

+0

あなたの答えをありがとう。それはうまくいく。あなたの答えが下落した理由は分かりません。それがなぜ機能するのか説明できますか? – John

+0

今編集を行いました。それがそれを説明することを望むならば、私はさらに説明しようとします。 –

0

これはあなたに期待される結果が得られます:私はこれが欲しい

function notBeforeDate($date_to_compare) { 
    $now = date_create('now'); 
    $date = date_create($date_to_compare); 


    $diff=date_diff($now,$date); 
    return $diff->format("%r%a"); 
} 
var_dump(notBeforeDate('2017-02-17 12:48:00')) 
+0

申し訳ありません、正または負の値を持つように編集しました –

+0

あなたの答えは私の問題を解決しません。 $ diffは現在の日付と日付に対して常に-0と0になります。+1 – John

関連する問題