PHP 中的日期比较行为不可预测

发布于 2024-12-04 09:40:15 字数 269 浏览 1 评论 0原文

我的 $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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

冷月断魂刀 2024-12-11 09:40:16

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

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

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

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

}

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 your if():

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

}
深海少女心 2024-12-11 09:40:16

它返回字符串格式的日期(例如)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 天以上的日期,只需将 > 翻转为 <

It's returning the date in the string format of (for example) 2000-01-01, which when converted to boolean is true.

Instead, check for this:

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

Obviously, if you want dates more than 20 days old only, just flip the > to a <

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文