回答:
strtotime($var);
時間値に変換します
time() - strtotime($var);
からの秒数を与えます $var
if((time()-(60*60*24)) < strtotime($var))
$var
最終日以内かどうかチェックします。
そのフォーマットは標準的な文字列比較に完全に適しています。
if ($date1 > $date2){
//Action
}
今日の日付をその形式で取得するには、次のように使用します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タイムゾーンを参照するには、ここをクリックしてください。
mm/dd/yyyy
形式の2つの日付時刻文字列を日付に変換して比較するよりも高速です。開発者がシステムの複数のタイムゾーンに日付を持っていると、いつも心配になります。システムに日付を保存し、常に単一のタイムゾーンで保存し、必要なタイムゾーンで表示することをお勧めします。SQLサーバーでもyyyy-mm-dd
フォーマットyyyymmdd
がはるかに速くソートされることに気付いた1998年頃にフォーマット(または)を使い始めました。
どうぞ:
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());
}
if(strtotime('2013-01-22 00:00:00.00') < time()){....}
で済みました。
次のDateTime
クラスを使用できます。
$past = new DateTime("2010-01-01 00:00:00");
$now = new DateTime();
$future = new DateTime("2021-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 を返すことに注意してください。
$future
過去になった。:P
$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
$var
OPでも同じではありません
私の経験に基づく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";
入力はプレーンな日付文字列であるため、strtotime()
on $input
を使用すると、2016-11-09の午前0時であると想定されます。そのため、time()
午前0時以降に実行する$input
と、たとえ同じ日であっても、常に過去として扱われます。
これを修正するには、次のように簡単にコーディングできます。
if (date("Y-m-d") <= $input)
{
echo "Input date is equal to or greater than today.";
}
数年後、私はボビージャックの24時間最後の観察が今日ではないことに気づきました。そして、私は答えが非常に賛成されたことに驚いています...
特定の日付が別の日付よりも小さいか、等しいか、大きいかを比較するには、最初にそれらをその日の初めに「下げる」必要があります。つまり、両方の日付で同じ00:00:00の時間について話していることを確認してください。これは次のように簡単かつエレガントに実行できます。
strtotime("today") <=> strtotime($var)
$var
指定されたOPのように00:00:00の時間部分がある場合。
<=>
必要なものに置き換えます(またはphp 7でこのようにしてください)
また、明らかに、両方について同じタイムゾーンについて話している。サポートされているTimeZonesのリストについて
$date1=date_create("2014-07-02");
$date2=date_create("2013-12-12");
$diff=date_diff($date1,$date2);
(w3schoolsの例、完璧に動作します)
w3schoolsからのジョスアの答えをさらに詳しく説明します。
//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に関する私の最初の投稿!
あなたが時間と日付で物事を行う場合、カーボンはあなたの親友です。
次にパッケージをインストールします。
$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;
そしてはるかに;