PHP 日期不太合适

PHP dates not quite working

对 php 日期使用逻辑运算符不能完全正确地工作。可以算出2016年在2017年之前,但是无法知道1号在4号之前。

我注意到这种错误有一段时间了:如何最好地解决和避免它?

$date_extra_early = date("2017-01-1 07:30:00");
$today = date("Y-m-d H:i:s");
var_dump($today);
var_dump($date_extra_early);
if ($today>$date_extra_early)
                    echo("today is greater than date extra early\n");
else echo("today is less than date extra early\n");

输出

string(19) "2017-01-04 14:50:32" string(18) "2017-01-1 07:30:00" today is less than than date extra early

您可以比较 DateTime 对象以支持字符串(后者由 date() 返回)。 ==, <, >, <=, >= 的逻辑操作确实像 DateTime 对象的魅力一样工作。此外,DateTime 构造函数理解许多不同的输入格式,并且还可以帮助处理格式错误的输入。

$earlydate = new DateTime('2017-01-1 07:30:00');
$today = new DateTime('now');

if($today > $earlydate)
    echo 'today is greater than date extra early';
else
    echo 'today is less than date extra early';

另请参阅:http://php.net/manual/en/class.datetime.php

您需要以正确的datetime格式指定日期

$date_extra_early = date("2017-01-01 07:30:00");
                                //^missing a leading 0 here

demo

或者您可以将日期转换为整数,然后进行比较

if (strtotime($today)>strtotime($date_extra_early)) {
    echo("today is greater than date extra early\n");
} else { 
    echo("today is less than date extra early\n");
}

在这两种情况下它都打印

today is greater than date extra early

demo

您确实必须为 date() 使用正确的格式。 在这种情况下,您缺少 1(天)前面的前导 0

$date_extra_early = date("2017-01-01 07:30:00");
$today = date("Y-m-d H:i:s");
var_dump($today);
var_dump($date_extra_early);
if ($today>$date_extra_early)
  echo("today is greater than date extra early\n");
else 
  echo("today is less than date extra early\n");

输出:

string '2017-01-04 22:00:57' (length=19)
string '2017-01-01 07:30:00' (length=19)
today is greater than date extra early