首页 > 解决方案 > 如果语句使用日期和 strtotime 返回错误结果

问题描述

我正在尝试使用 if 语句来表示“如果今天介于两个日期之间,请执行此操作……”等。

它不起作用,我完全不知所措,因为据我所知 - 它应该起作用!

if (date('d/m/y', strtotime('now')) >= date('d/m/y', strtotime('1 January 2021')) && date('d/m/y', strtotime('now')) <= date('d/m/y', strtotime('31 January 2021'))):
    echo 'true';
else:
    echo 'false';
endif;

今天是 2020 年 12 月 3 日 - 为什么它告诉我这个说法是真的?

PS。如果我将其更改为任何一个,或两者兼而有之> 30th December 2020,它确实有效< 1st February 2021- 但我很谨慎这样做,以防它只是一个小故障并且我犯了一个明显的编码错误。

标签: phpdatestrtotime

解决方案


首先。现在不是 12 月 3 日,而是 12 月 1 日。

您遇到的问题是因为您正在尝试比较字符串。
Date() 返回字符串,据我所知,没有任何编程语言可以正确地(在这种情况下正确地表示)将 > 或 < 与字符串进行比较。它是 === 或 !==。

所以在比较中使用 Unix 时间,因为它是数字的,而且计算机更容易理解。

$now = strtotime('now');
$start = strtotime('1 January 2021');
$end = strtotime('31 January 2021');

if ($now >= $start && $now <= $end):
    echo 'true';
else:
    echo 'false';
endif;

https://3v4l.org/KAvQ2


推荐阅读