Answers:
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
格式的日期时间字符串转换为日期然后进行比较要快。当开发人员的系统中有多个时区的日期时,我总是很担心。我认为最好将日期存储在系统中,始终在单个时区中,然后在所需的任何时区中显示它。我在1998年左右开始使用yyyy-mm-dd
format(或yyyymmdd
),当时我意识到即使在SQL Server中,它的排序速度也要快得多。
干得好:
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)
*请注意,===
比较两个不同的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中的平等
根据我的经验,请谨慎行事,如果您的目的仅涉及日期,请小心添加时间戳记。例如,假设今天是"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的午夜。因此,即使在同一天,time()
午夜之后的任何时间运行都将始终$input
视为过去。
要解决此问题,您可以像下面这样简单地编写代码:
if (date("Y-m-d") <= $input)
{
echo "Input date is equal to or greater than today.";
}
几年后,我第二次接受鲍比·杰克(Bobby Jack)的观察,认为今天不是24小时!令我惊讶的是答案如此之高...
要比较某个日期是否小于,等于或大于另一个日期,首先需要将它们“调低”到一天的开始。换句话说,请确保两个日期都在谈论相同的00:00:00时间。这可以通过以下方式简单而优雅地完成:
strtotime("today") <=> strtotime($var)
如果$var
时间部分指定为00:00:00(如指定的OP)。
替换<=>
为您需要的任何内容(或将其保留在php 7中)
同样,很明显,我们在谈论两个时区。有关受支持的时区的列表
从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的第一篇文章!
如果您有时间和日期做事,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;
以及更多;