如今,PHP在这些日期之间(排除年)



我正在尝试做一个简单的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")

  1. 使用date功能而不是时间。
  2. 切换&&||。没有m-d日期字符串将既大于11-01,又小于02-28
  3. 您可能想使用一家包容性比较运营商与11月1日,而对3月1日的独家使用者来说明LEAP年。
  4. 而不是两次调用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;

请记住:

  1. time()始终返回当前的UNIX时间戳,即自Unix Epoch以来的秒数。使用strtotime将字符串转换为时间,然后使用date()将时间戳转换为给定格式的字符串。
  2. UNIX时间戳始终是绝对的。您不能将"月"转换为UNIX时间戳。您只能使用time()获取当前的UNIX时间戳,或使用date()从时间戳获取特定数据。

参考:

  • strtotime
  • time
  • date

相关内容

  • 没有找到相关文章

最新更新