Php 将给定日期与今天进行比较

Php 将给定日期与今天进行比较,php,date,datetime,Php,Date,Datetime,我有以下几点 $var = "2010-01-21 00:00:00.0" 我想将此日期与今天的日期进行比较(即,我想知道此$var是否在今天之前或等于今天) 我需要使用什么功能 strtotime($var); 将其转换为时间值 time() - strtotime($var); 提供自$var if((time()-(60*60*24)) < strtotime($var)) if((time()-(60*60*24))getTimestamp());//内部(12622860

我有以下几点

$var = "2010-01-21 00:00:00.0"
我想将此日期与今天的日期进行比较(即,我想知道此
$var
是否在今天之前或等于今天)

我需要使用什么功能

strtotime($var);
将其转换为时间值

time() - strtotime($var);
提供自
$var

if((time()-(60*60*24)) < strtotime($var))
if((time()-(60*60*24))
将检查
$var
是否已在最后一天内到达。

给您:

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());
}
函数isPast($time)
{
返回(strotime($time)time());
}

该格式非常适合标准字符串比较,例如

if ($date1 > $date2){
  //Action
}
要以这种格式获取今天的日期,只需使用:
date(“Y-m-dh:i:s”)

因此:


参考可用的PHP时区。

要完成BoBby Jack,DateTime对象的使用,如果您有PHP5.2.2+:

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

}
(w3schools示例,它工作得非常完美)

您可以使用该类:

比较运算符工作*:

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)
var_dump($pass<$now);//布尔(真)
var_dump($future<$now);//布尔(假)
var_dump($now=$pass);//布尔(假)
var_dump($now==new DateTime());//布尔(真)
var_dump($now==$future);//布尔(假)
变量转储($pass>$now);//布尔(假)
变量转储($future>$now);//布尔(真)
还可以从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)
var_dump($pass->getTimestamp());//内部(1262286000)
var_dump($now->getTimestamp());//内部(1431686228)
var_dump($future->getTimestamp());//国际(1577818800)
var_dump($pass->getTimestamp()<$now->getTimestamp());//布尔(真)
var_dump($future->getTimestamp()>$now->getTimestamp());//布尔(真)

*请注意,
==
在比较两个不同的DateTime对象时返回false,即使它们代表相同的日期。

几年后,我支持Bobby Jack的观察,即过去的24小时不是今天!!!我感到惊讶的是,答案竟然如此之高

若要比较某个日期是否小于、等于或大于另一个日期,首先需要将它们“调低”到一天的开始。换句话说,确保两个日期的00:00:00时间相同。 这可以简单而优雅地完成,如下所示:

strtotime("today") <=> strtotime($var)
strotime(“今天”)strotime($var)
如果
$var
的时间部分为00:00:00,则与指定的OP类似

替换为您需要的任何内容(或在PHP7中保持此状态)

而且,很明显,我们谈论的是两个国家的同一时区。
根据我的经验,如果您的目的只涉及日期,那么请小心包含时间戳。例如,假设今天是
“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.
}
由于输入是纯日期字符串,因此在
$input
上使用
strotime()
将假定这是2016-11-09的午夜。因此,在午夜之后的任何时候运行
time()
都会将
$input
视为过去,即使它们在同一天

要解决此问题,只需编写如下代码:

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

if(date(“Y-m-d”)扩展来自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上的第一篇帖子!

比较日期时间对象:

(我选择了10天-任何超过10天的都是“旧的”,否则是“新的”)


如果你做的事情与时间和日期是你最好的朋友

安装软件包,然后:

$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;

还有更多;

目前还没有考虑到一些给定的答案

这是我的建议

$var = "2010-01-21 00:00:00.0"
$given_date = new \DateTime($var);

if ($given_date == new \DateTime('today')) {
  //today
}

if ($given_date < new \DateTime('today')) {
  //past
}

if ($given_date > new \DateTime('today')) {
  //future
}
$var=“2010-01-21 00:00:00.0”
$given_date=new\DateTime($var);
如果($given_date==new\DateTime('today')){
//今天
}
如果($given_datenew\DateTime('today')){
//未来
}

为什么会有奇怪的向后逻辑和无关的布尔值?为什么不只是“return strotime($time)==strotime('today')”、“return strotime($time)>time()”和“return strotime($time)if(strotime('2013-01-22 00:00:00.00')
我也这么做了。我建议设置时区,这不是我的
$var
在opa中也等于的,并且对于(new DateTime())->格式('Y-m-d'),您需要PHP>=5.4;对于php4,从$var=“2010-01-21 00:00:00.0”退出最后一个“.0”,否则strotime将返回-1I我使用的是PHP7.1。如果返回值是一个带秒数的整数,则忽略次秒部分。这也会忽略timezone@anushr,如果比较中需要时区,则可以在比较之前将时间差添加到日期。这比尝试在
mm中转换两个日期时间字符串更快/dd/yyyy
将日期格式化,然后进行比较。当开发人员的系统中有多个时区的日期时,我总是很担心。我认为最好在系统中存储日期,总是在单个时区,然后在需要的任何时区显示日期。我开始使用
yyyy-mm-dd
格式(或
yyyymmdd
)大约在1998年,我意识到即使在SQL server中,它的排序速度也要快得多。我以前也使用过类似的方法,但在紧要关头,轻松获取这个答案确实有帮助。我不确定他们为什么选择基于第二个的答案作为“最佳”当这一个是文字日期时!这对我来说很好,对于那些挣扎在时区放置位置的人来说,你可以在PHP文件的任何地方包含代码
date\u default\u timezone\u set('America/New\u York');
//  plain date string
$input = "2016-11-09";
if (date("Y-m-d") <= $input)
{
    echo "Input date is equal to or greater than today.";
}
//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';}
$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');
}
$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()))
$theDay->gt(Carbon::today()) ? true : false;
$var = "2010-01-21 00:00:00.0"
$given_date = new \DateTime($var);

if ($given_date == new \DateTime('today')) {
  //today
}

if ($given_date < new \DateTime('today')) {
  //past
}

if ($given_date > new \DateTime('today')) {
  //future
}