2017-01-04 122 views
0

在php日期中使用逻辑运算符并不完全正确。能够计算出2016年是在2017年之前,但无法认识到1月在本月4日之前。PHP日期不太工作

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

$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"); 

输出

串(19) “2017年1月4日14时五十分32秒” 的字符串(18) “2017年1月1日7点三十零分○○秒” 今天 是少比日期早

+1

你有一个正确的时间值作为输入尝试过吗? '$ date_extra_early = date(“2017-01-01 07:30:00”);' – feeela

+0

@feeela好吧,前导零使逻辑陈述成为可能,但这不仅仅是一个错字。我注意到日期真的很脆。我依赖它的时代已经崩溃,它已经崩溃了。想知道是否有办法保证它能按预期工作。 – Stumbler

+0

不能在此刻进行测试,但尝试 '如果(的strtotime(“$今天”)>的strtotime(“$ date_extra_early”))...' –

回答

3

您可以比较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

+0

什么日期和日期时间之间的区别? – Stumbler

+4

这是你应该自己思考的时候,“我应该查阅手册”。 –

1

您需要正确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"); 
} 

在这两种情况下,打印今天

比日期早额外

demo

+0

这是不正确的,对于'日期()'函数的第一个参数,是一个格式字符串。无需任何格式的字符,该函数不会做任何事情,所以它只是输出输入。 – jeroen

1

事实上,你必须使用正确的格式的日期()更大。 在这种情况下,你缺少的在1(天)的前

$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"); 

输出前导0:

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