2010-09-27 69 views
3

Hallo,比较日期不起作用

我在比较2个日期。显然$ db_minus7更大,所以$ can_invoiced的值应该是'maybe',但它是'是'。当我执行。

<?php 

$db_minus7 = '2010-07-05 09:45:29.420'; 
$completion_date = '30.07.2009'; 
if(date("m-d-Y",strtotime($db_minus7)) > date("m-d-Y",strtotime($completion_date))) { 
    $can_invoiced = 'maybe'; 
} else { 
    $can_invoiced = 'Yes'; 
} 

echo $can_invoiced; 

?> 

请帮助

+0

感谢您的答案! – satya 2010-09-27 13:26:07

回答

5

你为什么不只是一次比较在格式化他们的时间instad这样的:

if(strtotime($db_minus7) > strtotime($completion_date)) { 
    $can_invoiced = 'maybe'; 
} else { 
    $can_invoiced = 'Yes'; 
} 

编辑:

,如果你想使用日期(),使用"Ymd""Y-m-d"作为模式,因为它是字符串比较,这是合理的顺序(排列从“大”(年)到小(天......或可能秒)(如果需要)的模式);

+0

谢谢。如果我使用if(date(“mdY”,strtotime($ db_minus7))转换为适当的日期格式,然后比较...为什么会产生yes? – satya 2010-09-27 13:10:53

+1

@ user453893 - 您在这里没有使用SQL,您使用的是PHP,而PHP date()函数将日期转换为人类可读的字符串...然后比较字符串,而不是它们表示的日期 – 2010-09-27 13:14:40

+0

现在我明白了..我在印象日期函数中会返回格式为mdY的日期现在我已经检查过了...感谢详细的expalnation。如果我可以的话,我会提高你的评价。 – satya 2010-09-27 13:21:30

0

比较的日期为日戳,而不是字符串:

if(strtotime($db_minus7) > strtotime($completion_date)) { 

如果您有日期的比较结果为字符串,然后用年月日,而不是MDY

2

不要'使用"m-d-Y"但是"Y-m-d"

01-01-2010低于02-01-2009坏!),但2010-01-01不低于2009-01-02好!)。

0

永远不会比较日期作为字符串,即使它适用于您的测试用例,它会早晚落在你的脚上......或者......理查德·斯特曼将追捕你,我不知道...

if(strtotime($db_minus7) > strtotime($completion_date)) { 
    $can_invoiced = 'maybe'; 
} else { 
    $can_invoiced = 'Yes'; 
}