2016-04-22 8 views
0

私は、日付が他の日付との間にあるかどうかを調べる方法を探しています。 if文のPHPでのdate()関数の使用日付がPHPの他の日付の間にあるかどうかチェックする

私が作った機能はほとんどの場合動作しますが、時には間違っています。なぜ私は分からない。

function checkToday($date1, $date2, $today) 
{ 

    if($date1 < $today && $date2 > $today) 
    { 
     return "between"; 
    } elseif ($date1 < $today) { 
     return "before"; 
    } else { 
     return "after"; 
    } 
} 

私は多くの異なる日付でそれを呼んでいる、それらはすべて、この1を除いて動作するように表示されます。

$startDate = date('d-m-Y', strtotime("07-03-2016")); 
$endDate = date('d-m-Y', strtotime("19-05-2016")); 
$currDate= date('d-m-Y'); 
$check = checkToday($startDate, $endDate, $currDate); 
echo $check.' '; 
echo $startDate.' '; 
echo $endDate.' '; 
echo $currDate.' '; 

これは出力:2016年7月3日19-05-2016前22- 04から2016

しかし、はっきり22-04-2016は

2016年7月3日の間及び19-05-2016任意のアイデアでありますか?

ありがとう

+0

以下などのPHPで日付を比較するために、この機能を使用する必要があり、私はそれは単純なものでなければなりません知っていたtimestapsではなくsrings – splash58

答えて

1

日付を文字列として比較しているため、正しく動作しません。

タイムスタンプ(time()またはstrtotime()が返す)を比較するか、DateTimeオブジェクトを使用する必要があります。日時と

例:

<?php 

function checkToday($date1, $date2, $today) 
{  
    if($date1 < $today && $date2 > $today) 
    { 
     return "between"; 
    } elseif ($date1 < $today) { 
     return "before"; 
    } else { 
     return "after"; 
    } 
} 

$startDate = new DateTime("2016-03-07"); 
$endDate = new DateTime("2016-05-19"); 
$currDate= new DateTime(); 
$check = checkToday($startDate, $endDate, $currDate); 

echo $check.' '; // Returns between 
echo $startDate->format("d-m-Y").' '; 
echo $endDate->format("d-m-Y").' '; 
echo $currDate->format("d-m-Y").' '; 
0

PHPの1つの以上の機能strtotimeがあります。あなたは

function checkToday($date1, $date2, $today) 
{  
    if(strtotime($date1) < strtotime($today) && strtotime($date2) > strtotime($today)) 
    { 
     return "between"; 
    } elseif (strtotime($date1) < strtotime($today)) { 
     return "before"; 
    } else { 
     return "after"; 
    } 
} 
+0

を比較します!どうもありがとうございます。これは修正されました –

+0

ようこそ。答えを受け入れ、upvote。 –

+0

私はまだそれを行うのに十分な '評判'がありません。それは一般に公開されません。 –

関連する問題