我有以下几点
$var = "2010-01-21 00:00:00.0"
我想将这个日期与今天的日期进行比较(即我想知道这个$var是否在今天之前或等于今天)
我需要使用什么函数?
我有以下几点
$var = "2010-01-21 00:00:00.0"
我想将这个日期与今天的日期进行比较(即我想知道这个$var是否在今天之前或等于今天)
我需要使用什么函数?
当前回答
一些给出的答案没有考虑到今天!
这是我的建议。
$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
}
其他回答
你可以使用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,即使它们表示相同的日期。
如果你做事有时间和日期,碳是你最好的朋友;
安装包,然后:
$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;
还有更多;
要完成BoBby Jack,使用DateTime对象,如果你有php 5.2.2+:
if(new DateTime() > new DateTime($var)){
// $var is before today so use it
}
根据我的经验,一个警告是,如果你的目的只涉及日期,那么要小心包括时间戳。例如,今天是“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的午夜。因此,run time()在午夜之后的任何时间都会将$input视为过去,即使它们是在同一天。
要解决这个问题,你可以简单地编写如下代码:
if (date("Y-m-d") <= $input)
{
echo "Input date is equal to or greater than today.";
}
几年后,我赞同鲍比·杰克的观察:过去的24小时不是今天!!我很惊讶这个答案得到了这么多的好评……
要比较某个日期是否小于、等于或大于另一个日期,首先你需要把它们“调低”到一天的开始。换句话说,确保你说的是两个日期的相同00:00:00时间。 这可以简单而优雅地完成:
strtotime("today") <=> strtotime($var)
如果$var的时间部分像OP指定的那样是00:00:00。
将<=>替换为你需要的任何东西(或在php 7中保持这样)
而且,很明显,我们说的是两个时区相同。 有关支持的时区列表