web-dev-qa-db-ja.com

与えられた日付を今日と比較する

私がフォローしている

$var = "2010-01-21 00:00:00.0"

この日付と今日の日付を比較します(つまり、この$varが今日より前であるか、今日と等しいかどうかを知りたいです)。

どの機能を使用する必要がありますか?

193
alexus
strtotime($var);

時間値に変換します

time() - strtotime($var);

$varからの経過秒数を教えてください

if((time()-(60*60*24)) < strtotime($var))

$varが最終日以内であったかどうか確認します。

269
Tyler Carter

そのフォーマットは標準の文字列比較には完全に適しています。

if (date1 > date2)

その形式で今日の日付を取得するには、単にdate("Y-m-d H:i:s")を使います。

そう:

$today = date("Y-m-d H:i:s");
$date = "2010-01-21 00:00:00";

if ($date < $today) {

それはそのフォーマットの美しさです:それはうまく注文します。もちろん、そのはあなたの正確な状況によっては効率が悪くなるかもしれませんが、それはずっとずっと便利になり、より保守しやすいコードにつながるかもしれません - 知っておくべきです本当にその判断を呼ぶためにもっと.

正しいタイムゾーンには、例えば、

date_default_timezone_set('America/New_York');

利用可能なPHPタイムゾーンを参照するには、ここをクリック してください。

190
Bobby Jack

どうぞ:

function isToday($time) // midnight second
{
    return (strtotime($time) === strtotime('today'));
}

isToday('2010-01-22 00:00:00.0'); // true

また、さらにいくつかのヘルパー関数:

function isPast($time)
{
    return (strtotime($time) < time());
}

function isFuture($time)
{
    return (strtotime($time) > time());
}
56
Alix Axel

BoBby Jackを完成させるには、DateTime OBjectを使用します(php 5.2.2以降)。

if(new DateTime() > new DateTime($var)){
    // $var is before today so use it

}
45
kamakazuu

DateTime クラスを使うことができます。

$past   = new DateTime("2010-01-01 00:00:00");
$now    = new DateTime();
$future = new DateTime("2020-01-01 00:00:00");

比較演算子は動作します*:

var_dump($past   < $now);         // bool(true)
var_dump($future < $now);         // bool(false)

var_dump($now == $past);          // bool(false)
var_dump($now == new DateTime()); // bool(true)
var_dump($now == $future);        // bool(false)

var_dump($past   > $now);         // bool(false)
var_dump($future > $now);         // bool(true)

DateTimeオブジェクトからタイムスタンプ値を取得して比較することもできます。

var_dump($past  ->getTimestamp());                        // int(1262286000)
var_dump($now   ->getTimestamp());                        // int(1431686228)
var_dump($future->getTimestamp());                        // int(1577818800)
var_dump($past  ->getTimestamp() < $now->getTimestamp()); // bool(true)
var_dump($future->getTimestamp() > $now->getTimestamp()); // bool(true)

* 2つの異なるDateTimeオブジェクトが同じ日付を表している場合でも、それらを比較すると===はfalseを返します。

41
Salman A
$toBeComparedDate = '2014-08-12';
$today = (new DateTime())->format('Y-m-d'); //use format whatever you are using
$expiry = (new DateTime($toBeComparedDate))->format('Y-m-d');

var_dump(strtotime($today) > strtotime($expiry)); //false or true
12
Hassan

数年後、私は最後の24時間が今日ではないという2度目のBobby Jackの観察をしています!そして、私はその答えが大いに支持されたことに驚きました...

特定の日付が他の日付よりも小さい、等しい、または大きいかどうかを比較するには、まずそれらの日付をその日の初めに「下げる」必要があります。つまり、両方の日付で同じ00:00:00の時間について話していることを確認してください。これは、次のように単純かつエレガントに実行できます。

strtotime("today") <=> strtotime($var)

指定されたOPのように$varが00:00:00に時間部分を持つ場合。

<=>を必要なものに置き換えてください(またはphp 7ではこのようにしてください)

また、明らかに、我々は両方のために同じタイムゾーンについて話しています。サポートされているタイムゾーンの リスト

6
Nelu Bidonelu
$date1=date_create("2014-07-02");
$date2=date_create("2013-12-12");
$diff=date_diff($date1,$date2);

(w3schoolsの例、完璧に動作します)

5
Richard

私の経験に基づく1つの注意、あなたの目的が日付だけを含む場合は、タイムスタンプを含めるように注意してください。たとえば、今日は"2016-11-09"だとします。タイムスタンプを含む比較はここで論理を無効にします。例、

//  input
$var = "2016-11-09 00:00:00.0";

//  check if date is today or in the future
if ( time() <= strtotime($var) ) 
{
    //  This seems right, but if it's ONLY date you are after
    //  then the code might treat $var as past depending on
    //  the time.
}

上記のコードは正しいようですが、比較したい日付だけの場合は、上記のコードは正しいロジックではありません。なぜなら、time()とstrtotime()はタイムスタンプを含むからです。つまり、両方の日付が同じ日になっていても、時間差は重要になります。以下の例を見てください。

//  plain date string
$input = "2016-11-09";

入力は単純な日付文字列なので、$inputstrtotime()を使用すると、2016-11-09の真夜中であると見なされます。そのため、深夜0時以降にtime()を実行すると、$inputは同じ日に処理されますが、常に過去のものとして扱われます。

これを修正するには、次のように単純にコーディングできます。

if (date("Y-m-d") <= $input)
{
    echo "Input date is equal to or greater than today.";
}

他の便利な例は単純なPHPクラスです。

それは多くの方法と比較関数を提供します。

例えば:

$date = new simpleDate();
echo $date->now()->compare('2010-01-21 00:00:00')->isBefore();

チュートリアルページにもたくさんの例があります。 こちらをクリックしてください

3
isa

W3schoolsからのJosuaの回答を拡大します。

//create objects for the dates to compare
$date1=date_create($someDate);
$date2=date_create(date("Y-m-d"));
$diff=date_diff($date1,$date2);
//now convert the $diff object to type integer
$intDiff = $diff->format("%R%a");
$intDiff = intval($intDiff);
//now compare the two dates
if ($intDiff > 0)  {echo '$date1 is in the past';}
else {echo 'date1 is today or in the future';}

これが役に立つことを願っています。 stackoverflowに関する私の最初の投稿!

2
enceladus

日時オブジェクトを比較します。

(私は10日を選んだ - 10日より古いものは "OLD"、それ以外は "NEW")

$now   = new DateTime();
$diff=date_diff($yourdate,$now);
$diff_days = $diff->format("%a");
if($diff_days > 10){
    echo "OLD! " . $yourdate->format('m/d/Y');
}else{
    echo "NEW! " . $yourdate->format('m/d/Y');
}
1
Kevin

あなたが時間と日付を使って物事をするなら Carbon はあなたの親友です。

それからパッケージをインストールします。

$theDay = Carbon::make("2010-01-21 00:00:00.0");

$theDay->isToday();
$theDay->isPast();
$theDay->isFuture();
if($theDay->lt(Carbon::today()) || $theDay->gt(Carbon::today()))

lt =より小さい、gt =より大きい

質問のように:

$theDay->gt(Carbon::today()) ? true : false;

そしてもっとたくさん。

0