2016-09-16 5 views
2

私はどのように私は、もしその日が3日未満古いであることを確認することができます日付指定された日付が3日より新しいかどうかを確認するにはどうすればよいですか?

2016年9月16日

がありますか?

私は本当に愚かなことだし、不満は私がここに私のコード

public function isNew() 
{ 
    return strtotime($this->created_at) > time() && strtotime($this->created_at) < strtotime('+3 days',time()); 
} 
+0

質問はあいまいです。タイトルは「* 3日より新しい*」と表示されますが、問題の本文には「* 3日未満*」と表示されます。 3日以内の日付は、今から3日後には必要ないでしょうか?その日付と現在の日付との間の差は、3日以内でなければなりません。したがって、 'abs(time() - strtotime($ this-> created_at))<(3 * 24 * 60 * 60)'です。 – Sherif

答えて

1

はこれを処理するためのDateTimeとDateIntervalを使用して簡単であるべきだ

をそれを理解しませ作っています。

$date = new DateTime('2016-09-16'); 

$diff = (new DateTime)->diff($date)->days; 

return $diff < 3; 
+0

申し訳ありませんが、タイプミス。それは実際には 'DateTime'です。 – user3158900

1

diff()を使用してください。 DateIntervalオブジェクトを返します。そのオブジェクト内にアクセスできる日プロパティー(days)になります。

PHPの DateTimeDateIntervalクラスの使用
// compare two distinct dates: 

$datetime1 = new DateTime('2016-09-16'); 
$datetime2 = new DateTime('2016-09-12'); 
$interval = $datetime1->diff($datetime2); 
$daysOld = $interval->days; 
// int(4) 

// or compare today vs your date... 

$datetime1 = new DateTime('2016-09-16'); 
$now = new DateTime(); 
$interval = $now->diff($datetime1); 
$daysOld = $interval->days; 
// int(0) 


// then determine if it's at least 3 days old: 
$is3daysOld = ($daysOld >= 3 ? true : false); 

http://php.net/manual/en/datetime.diff.php

+0

$ interval-> dはここでは間違っています。なぜなら、絶対値ではなく、日数、基質年数、月数の違いを表すからです。しかし、 '(新しいDateTime( '2016-09-16')) - > diff(新しいDateTime( '2015-09-16')) - > d === 0'、 -09-16 ')) - > diff(new DateTime(' 2015-09-16 ')) - > days === 366'となります。 – Sherif

+0

ありがとう@Sherif。素晴らしいキャッチ。訂正された歴史的な目的のための編集された答え。 –

1

はあなたに多くの良いを行うだろう。方法は次のとおりです。

<?php 

    function isNewerThan3Days($date) { 
     $today = new DateTime(); 
     $date = new DateTime($date); 

     $diff = $today->diff($date); 
     $diffD = $diff->days; 
     if($diffD>=3){    
      return false; 
     } 
     return true; 
    } 

    var_dump(isNewerThan3Days("2016-09-14")); //<== YIELDS:: boolean true 
+0

'$ diff-> d 'は絶対値ではなく、日数、基質年数、月数の違いを表すため、ここでは間違っています。しかし、 '(新しいDateTime( '2016-09-16')) - > diff(新しいDateTime( '2015-09-16')) - > d === 0'、 -09-16 ')) - > diff(new DateTime(' 2015-09-16 ')) - > days === 366'となります。 – Sherif

+0

@Sherifありがとうございました.... – Poiz

1

これはあなたのためです。あなたのisNew()方法で

$date = new DateTime('2015-09-16'); 
$now = new DateTime(); 

$interval = $date->diff($now); 
$difference = $interval->format('%a'); 

if($difference < 3) { 
    // $date is fewer than 3 days ago 
} 

public function isNew() { 
    $created_at = new DateTime($this->created_at); 
    $now = new DateTime(); 

    $interval = $created_at->diff($now); 
    $difference = $interval->format('%a'); 

    if($difference < 3) { 
     return true; 
    } 

    return false; 
} 
+0

わかりませんが、おそらく私の理解が分かりやすいからでしょうか? –

+0

@RobertWade実際、それは私でした、それはすべての答えではありませんでした。私はなぜ私が投票したあなたの答えにコメントしました。間違っています。 – Sherif

0
return $this->created_at->diffInDays() < 3; 

パラメータdiffInDays()なしで今created_atとの間の完全な日数を返します。

0

なぜCarbonを使用しませんか? あなたはそれを簡単に行うことができ、そのように多くのカーボンをそうすることができます:

$dt = Carbon::createFromDate(2011, 8, 1); 
echo $dt->subDays(5)->diffForHumans();    // 5 days before 
関連する問題