比较给定日期和今天

时间:2010-01-21 23:57:55

标签: php date datetime

我有以下

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

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

我需要使用什么功能?

14 个答案:

答案 0 :(得分:269)

strtotime($var);

将其变为时间值

time() - strtotime($var);

为您提供自$var

以来的秒数
if((time()-(60*60*24)) < strtotime($var))

将检查$var是否在最后一天内。

答案 1 :(得分:190)

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

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');

Click here指的是可用的PHP时区。

答案 2 :(得分:56)

你走了:

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());
}

答案 3 :(得分:45)

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

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

}

答案 4 :(得分:41)

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

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

答案 5 :(得分:12)

$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

答案 6 :(得分:6)

几年后,我第二次看到Bobby Jack的观察,即过去24小时不是今天!令我感到惊讶的是答案得到了如此多的支持......

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

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

如果$var的时间部分在00:00:00,就像OP指定的那样。

<=>替换为您需要的任何内容(或在php 7中保留这样)

另外,显然,我们两个都在讨论相同的时区。 对于list of supported TimeZones

答案 7 :(得分:5)

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

(w3schools的例子,它很完美)

答案 8 :(得分:5)

根据我的经验,一个警告,如果您的目的只涉及日期,那么请小心包含时间戳。例如,今天说"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()上使用$input会假设它是2016-11-09的午夜。因此,在午夜后的任何时间运行time()将始终将$input视为过去,即使它们是在同一天。

要解决此问题,您可以简单地编码,如下所示:

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

答案 9 :(得分:3)

另一个有用的例子可以是简单的PHP类。

它提供了许多方法以及比较功能。

例如:

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

教程页面中还有很多示例。 Please click here

答案 10 :(得分:2)

扩大了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上的第一篇文章!

答案 11 :(得分:2)

某些给出的答案目前还没有考虑!

这是我的建议。

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

答案 12 :(得分:1)

比较日期时间对象:

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

interface INavigation {
  Id: number;
  AppId: number;
  NavId: number;
  Name: string;
  ParentId: string;
  PageURL: string;
  Position: string;
  Active: string;
  Desktop: string;
  Tablet: string;
  Phone: string;
  RoleId: string;
  Target: string;
}

class Navigation implements INavigation {

  Id: number;
  AppId: number;
  NavId: number;
  Name: string;
  ParentId: string;
  PageURL: string;
  Position: string;
  Active: string;
  Desktop: string;
  Tablet: string;
  Phone: string;
  RoleId: string;
  Target: string;

  constructor(navigation: any) {
    this.Id = navigation.Id
    this.AppId = navigation.NavAppId
    this.NavId = navigation.NavId
    this.Name = navigation.NavName
    this.ParentId = navigation.NavParentId
    this.PageURL = navigation.NavPageURL
    this.Position = navigation.NavPosition
    this.Active = navigation.NavActive
    this.Desktop = navigation.NavDesktop
    this.Tablet = navigation.NavTablet
    this.Phone = navigation.NavPhone
    this.RoleId = navigation.NavRoleId
    this.Target = navigation.NavTarget
  }
}

答案 13 :(得分:0)

如果您有时间和日期,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;

还有更多;