我有以下代码:
$var = "2010-01-21 00:00:00.0"
我想将这个日期与今天的日期进行比较(即我想知道这个$var
是在今天之前还是等于今天还是不是)
我需要使用哪个函数?
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时区。
date_default_timezone_set('America/New_York');
。要仅获取日期,请使用代码date("Y-m-d")
。 - chanaka wickramasinghe这是您需要的:
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()){....}
,它对我很有用。 - MDMoore313你可以使用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。
如果你的PHP版本是5.2.2或以上,要完成BoBby Jack,需要使用DateTime对象:
if(new DateTime() > new DateTime($var)){
// $var is before today so use it
}
$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 中的值。 - alexusstrtotime("today") <=> strtotime($var)
如果$var
的时间部分是00:00:00(就像OP指定的那样)。
用你需要的任何东西替换<=>
(或在php 7中保持不变)
当然,我们正在讨论相同的时区。有关支持的时区列表
根据我的经验,有一个需要注意的点,如果您的目的仅涉及日期,则要小心包含时间戳。例如,假设今天是"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.";
}
$date1=date_create("2014-07-02");
$date2=date_create("2013-12-12");
$diff=date_diff($date1,$date2);
在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';}