PHP中的日期比较表现不可预测

时间:2011-09-13 17:51:58

标签: php date

我有一个这样的日期字符串:2010-9-30在我的$ date_string变量中。

当我比较这样的字符串时:

if ( date( 'Y-m-d', strtotime( "+20 days", $date_string ) ) )
{
    // it returns true for all dates
}

所有日期的比较均属实,即使是昨天,也不是20天前。知道为什么会这样吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

您没有在日期之间进行任何比较。相反,您正在测试是否可以将作为第二个参数提供的日期成功转换为有效日期strtotime()。这个结果总是正确的,因为每个日期都有20天的有效日期。

换句话说,如果date()返回真值,则您的条件为TRUE。除非您在第二个参数中传递无效的时间戳(例如,2月42日),否则它将始终返回真值。

如果您想将date()调用的输出与另一个日期字符串进行比较,则需要在if()内添加一个额外的操作数:

if ('2011-09-02' == date('Y-m-d', strtotime("+20 days", $date_string))) {

}

答案 1 :(得分:1)

它以(例如)2000-01-01的字符串格式返回日期,转换为布尔值时为true

相反,检查一下:

if (time() > strtotime("+20 days", $date_string)) // Returns true if $date_string was in the last 20 days, or is in the future

显然,如果您只想要超过20天的日期,只需将>翻到<