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

我有以下几点

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

我想将这个日期与今天的日期进行比较(即我想知道这个$var是否在今天之前或等于今天)

我需要使用什么函数?

528561 次浏览
strtotime($var);

将其转换为时间值

time() - strtotime($var);

给出自$var开始的秒数

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

将检查$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());
}

这种格式非常适合于标准字符串比较。

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时区。

要完成BoBby Jack,使用DateTime对象,如果你有php 5.2.2+:

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


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

(w3schools的例子,它工作完美)

$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

你可以使用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)

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

几年后,我赞同鲍比·杰克的观察:过去的24小时不是今天!!我很惊讶这个答案得到了这么多的好评……

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

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

如果$var的时间部分像指定的OP一样是00:00:00。

用你需要的任何东西替换<=>(或在php 7中保持这样)

而且,很明显,我们讨论的是两者使用相同的时区。 对于支持的时区列表 < / p >

根据我的经验,一个警告,如果你的目的只涉及日期,那么要小心包括时间戳。例如,今天是"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";

因为输入是普通的日期字符串,所以在$input上使用strtotime()将假设这是2016-11-09的午夜。因此,在午夜后的任何时间运行time()都会将$input视为过去,即使它们是在同一天。

要解决这个问题,你可以简单地编写如下代码:

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

扩展Josua在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上的第一篇文章!

比较date - time对象:

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

$now   = new DateTime();
$yourdate = new DateTime("2021-08-24");
$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()))

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
}

试试这个:

if (date("Y-m-d",strtotime($funding_dt)) >= date("Y-m-d",strtotime('31-01-2007')))
{
echo "ok";
} else {
echo "not";
}