今天PHP在这些日期之间(不包括年份)

时间:2016-12-17 16:50:54

标签: php date compare strtotime

我试图做一个简单的if if语句。

<?php if (time("mm-dd") > strtotime("11-01") && time("mm-dd") < strtotime("02-28"))echo 'stuff' ?>

基本上我想回应一些事情,如果今天是11月,12月,1月,2月。如果我使用time()和全年,代码可以工作,但我想比较一个月,一天。我想我有一些愚蠢的语法错误,我无法弄清楚。此代码段放在我的html的<head>中,如果这有所不同的话。没什么帮助。感谢。

这就是我最终的结果。谢谢!

<?php if ($today > '12-16' || $today < '01-08') echo 'yes' ?>

$today = date("m-d")

2 个答案:

答案 0 :(得分:0)

  1. 使用date功能代替时间。
  2. &&切换为||。任何m-d日期字符串都不会大于11-01且小于02-28
  3. 您可能希望使用11月1日的包容性比较运算符和3月1日的独占运算符来计算闰年。
  4. 为什么不将结果分配给变量?
  5. 而不是两次调用date()

    这一切都在一起:

    $today = date('m-d');
    if ($today >= '11-01' || $today < '03-01') { ... }
    

答案 1 :(得分:0)

考虑仅使用date检查月份:

$month = (int) date("m");
$isMonthCorrect = $month === 11 || $month === 12 || $month === 1 || $month === 2;

请注意(int)的重要性。整数比较比字符串比较更可靠,即使它们的行为相似。

或者,如果要在两个日期之间进行检查以优化性能,则应在将日期放入代码之前将其评估为时间戳。

例如,您可以使用某些网站来转换Unix时间戳。 (不要在这里做任何广告,但你可以搜索“Unix时间戳转换器”你也可以使用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()从时间戳获取特定数据。
  3. 参考文献: