我正在尝试做一个简单的Echo语句。
<?php if (time("mm-dd") > strtotime("11-01") && time("mm-dd") < strtotime("02-28"))echo 'stuff' ?>
基本上,如果今天是11月,2月1月,如果我使用time()
和全年,我想回应一些东西,但我只想比较一个月,一天。我认为我有一些愚蠢的语法错误,但我无法弄清楚。如果这有所不同,则此代码段放在我的HTML的<head>
中。几乎没有帮助。谢谢。
这就是我最终得到的。谢谢!
<?php if ($today > '12-16' || $today < '01-08') echo 'yes' ?>
使用$today = date("m-d")
- 使用
date
功能而不是时间。 - 切换
&&
到||
。没有m-d
日期字符串将既大于11-01
,又小于02-28
。 - 您可能想使用一家包容性比较运营商与11月1日,而对3月1日的独家使用者来说明LEAP年。
- 而不是两次调用
date()
,为什么不将结果分配给变量?
在这里全部在一起:
$today = date('m-d');
if ($today >= '11-01' || $today < '03-01') { ... }
考虑使用date
仅检查一个月:
$month = (int) date("m");
$isMonthCorrect = $month === 11 || $month === 12 || $month === 1 || $month === 2;
请注意(int)
的重要性。整数比较比字符串比较更可靠,即使它们的行为相似。
或如果要在两个日期之间进行检查,以优化性能,则应将日期评估为时间戳,然后将其放入代码。
例如,您可以使用一些网站来转换UNIX时间戳。(不会在这里做广告,但是您可以搜索" Unix Timestamp Converter)您也可以使用php -r
进行快速输出:
php -r 'echo strtotime("2016-11-01 00:00:00");'
php -r 'echo strtotime("2017-02-01 00:00:00");'
然后您可以这样使用它们:
$minimum = 1477958400; // from first command line
$maximum = 1485907200; // from second command line
$isInPeriod = $minimum <= time() && time() <= $maximum;
请记住:
-
time()
始终返回当前的UNIX时间戳,即自Unix Epoch以来的秒数。使用strtotime
将字符串转换为时间,然后使用date()
将时间戳转换为给定格式的字符串。 - UNIX时间戳始终是绝对的。您不能将"月"转换为UNIX时间戳。您只能使用
time()
获取当前的UNIX时间戳,或使用date()
从时间戳获取特定数据。
参考:
-
strtotime
-
time
-
date