【问题标题】:PHP is today between these dates (exclude year)PHP 今天在这些日期之间(不包括年份)
【发布时间】:2016-12-17 16:50:53
【问题描述】:

我正在尝试做一个简单的 if echo 语句。

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

基本上,如果今天是 11 月、12 月、1 月、2 月,我想回显一些内容。如果我使用 time() 和全年,则代码有效,但我只想比较月、日。我想我有一些我无法弄清楚的愚蠢的语法错误。这段代码 sn-p 放在我的 html 的 &lt;head&gt; 中,如果这有区别的话。帮助不大。谢谢。


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

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

$today = date("m-d")

【问题讨论】:

标签: php date compare strtotime


【解决方案1】:
  1. 使用date 函数代替时间。
  2. &amp;&amp; 切换为||。没有m-d 日期字符串将永远大于11-01 和小于02-28
  3. 您可能希望使用包含 11 月 1 日的比较运算符和一个排除 3 月 1 日的比较运算符来计算闰年。
  4. 与其调用date() 两次,不如将结果分配给一个变量?

这一切都在一起了:

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

【讨论】:

    【解决方案2】:

    考虑使用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 纪元以来的秒数。使用strtotime 将字符串转换为时间,使用date() 将时间戳转换为给定格式的字符串。
    2. Unix 时间戳总是绝对的。您不能将“月”转换为 Unix 时间戳。只能通过time()获取当前Unix时间戳,或者通过date()从时间戳中获取特定数据。

    参考资料:

    【讨论】:

    • 所以在比较日期时,用 time() 还是 date() 比较更好?或者这只是一个偏好?我有一些使用完整日期的其他代码,所以我将 time() 与 strtotime("y-m-d") 进行了比较。工作正常,但想知道转换为 date() 是否更好。
    • @user5753132,他们做不同的事情。 time() 返回一个 Unix 时间戳(自 1970 年 1 月 1 日以来的秒数)。如果这符合您的需求,那就去吧。在这种情况下,这不是您想要的:您的周期每年重复一次。由于您只关心月份,因此您可以使用 PEMapModder 的建议来查看月份(尽管我可能会使用 in_array() 之类的东西,而不是一堆 ||s)。我的回答更笼统(但根据您的范围,您可能需要使用&amp;&amp; 而不是||)。
    • 我正在使用|| 列表,因为过早优化了防止函数调用开销。区别并不重要。
    • @PEMapModder,我们跑题了,但它确实很重要。可读性比您希望在这里获得的任何微不足道的性能提升重要得多。这种差异甚至不会出现在任何现实的基准上。
    • 我也很想知道您以何种方式相信“整数比较比字符串比较更可靠,即使它们的行为相似。”我认为这种说法没有任何道理,至少在这种情况下是这样。这特别令人困惑,因为您从字符串中获取整数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多