Tyl*_*ter 275
strtotime($var);
Run Code Online (Sandbox Code Playgroud)
将其变为时间值
time() - strtotime($var);
Run Code Online (Sandbox Code Playgroud)
给你几秒钟 $var
if((time()-(60*60*24)) < strtotime($var))
Run Code Online (Sandbox Code Playgroud)
将检查是否$var在最后一天内.
Bob*_*ack 198
该格式非常适合标准字符串比较,例如
if ($date1 > $date2){
//Action
}
Run Code Online (Sandbox Code Playgroud)
要以这种格式获取今天的日期,只需使用: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) {}
Run Code Online (Sandbox Code Playgroud)
这就是那种格式之美:它很好地命令.当然,这可能效率较低,具体取决于您的具体情况,但也可能更方便,并且可以使代码更易于维护 - 我们需要了解更多以真正做出判断.
对于正确的时区,您可以使用,例如,
date_default_timezone_set('America/New_York');
Run Code Online (Sandbox Code Playgroud)
单击此处以参考可用的PHP时区.
Ali*_*xel 57
干得好:
function isToday($time) // midnight second
{
return (strtotime($time) === strtotime('today'));
}
isToday('2010-01-22 00:00:00.0'); // true
Run Code Online (Sandbox Code Playgroud)
还有一些辅助函数:
function isPast($time)
{
return (strtotime($time) < time());
}
function isFuture($time)
{
return (strtotime($time) > time());
}
Run Code Online (Sandbox Code Playgroud)
小智 46
要完成BoBby Jack,使用DateTime OBject,如果你有php 5.2.2+:
if(new DateTime() > new DateTime($var)){
// $var is before today so use it
}
Run Code Online (Sandbox Code Playgroud)
Sal*_*n A 42
你可以使用这个DateTime类:
$past = new DateTime("2010-01-01 00:00:00");
$now = new DateTime();
$future = new DateTime("2020-01-01 00:00:00");
Run Code Online (Sandbox Code Playgroud)
比较运算符工作*:
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)
Run Code Online (Sandbox Code Playgroud)
也可以从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)
Run Code Online (Sandbox Code Playgroud)
*请注意,===在比较两个不同的DateTime对象时返回false,即使它们代表相同的日期.
小智 13
$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
Run Code Online (Sandbox Code Playgroud)
小智 6
几年后,我第二次看到Bobby Jack的观察,即过去24小时不是今天!令我感到惊讶的是答案得到了如此多的支持......
要比较某个日期是否小于,等于或大于另一个日期,首先需要将它们"降低"到当天的开始日期.换句话说,确保你在两个日期都在谈论相同的00:00:00时间.这可以简单而优雅地完成:
strtotime("today") <=> strtotime($var)
Run Code Online (Sandbox Code Playgroud)
如果$var时间部分在00:00:00,就像OP指定的那样.
替换<=>你需要的任何东西(或在php 7中保持这样)
另外,显然,我们正在讨论两者的相同时区.有关支持的时区列表
$date1=date_create("2014-07-02");
$date2=date_create("2013-12-12");
$diff=date_diff($date1,$date2);
Run Code Online (Sandbox Code Playgroud)
(w3schools的例子,它完美无缺)
根据我的经验,一个警告,如果您的目的只涉及日期,那么请小心包括时间戳.例如,今天说是"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.
}
Run Code Online (Sandbox Code Playgroud)
上面的代码似乎是正确的,但如果它只是你要比较的日期,那么,上面的代码不是正确的逻辑.为什么?因为,time()和strtotime()将提供包含时间戳.也就是说,即使两个日期都在同一天,但时间的差异也很重要.考虑以下示例:
// plain date string
$input = "2016-11-09";
Run Code Online (Sandbox Code Playgroud)
因为输入是普通日期字符串,所以使用strtotime()on $input将假定它是2016-11-09的午夜.因此,time()在午夜之后的任何时间运行将始终$input视为过去,即使它们在同一天.
要解决这个问题,您可以简单地编码,如下所示:
if (date("Y-m-d") <= $input)
{
echo "Input date is equal to or greater than today.";
}
Run Code Online (Sandbox Code Playgroud)