PHP 中的日期比较行为不可预测
我的 $date_string 变量中有一个像这样的日期字符串: 2010-9-30 。
当我像这样比较字符串时:
if ( date( 'Y-m-d', strtotime( "+20 days", $date_string ) ) )
{
// it returns true for all dates
}
比较对于所有日期都是正确的,即使是从昨天开始,而不是 20 天前。知道为什么会发生这种情况吗?
谢谢!
I have a date string like this: 2010-9-30 in my $date_string variable.
When I compare strings like this:
if ( date( 'Y-m-d', strtotime( "+20 days", $date_string ) ) )
{
// it returns true for all dates
}
The comparison is true for all dates, even from yesterday, which isn't 20 days ago. Any idea why that might be happening?
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您没有在日期之间进行任何比较。相反,您正在测试是否可以成功地将作为第二个参数提供给
strtotime()
的日期转换为有效日期。该结果始终为真,因为每个日期都有未来 20 天的有效日期。换句话说,如果
date()
返回一个真值,则您的条件为 TRUE。除非您在第二个参数中传递无效的时间戳(例如 2 月 42 日),否则它将始终返回真实值如果您想将
date()
调用的输出与另一个日期进行比较字符串,您将需要在if()
中添加一个额外的操作数:You are not making any comparisons between dates. Instead, you are testing whether you can successfully convert the date supplied as the second parameter to
strtotime()
into a valid date. That result is always true, because every date has a valid date 20 days in the future.In other words, if
date()
returns a truthy value your condition is TRUE. It will always return a truthy value unless you pass it an invalid timestamp in its second parameter (for example, the 42nd of February)If you want to compare the output of that
date()
call to another date string, you will need an additional operand inside yourif()
:它返回字符串格式的日期(例如)
2000-01-01
,转换为布尔值时为true
。相反,请检查以下内容:
显然,如果您只需要 20 天以上的日期,只需将
>
翻转为<
It's returning the date in the string format of (for example)
2000-01-01
, which when converted to boolean istrue
.Instead, check for this:
Obviously, if you want dates more than 20 days old only, just flip the
>
to a<