如果今天的日期是12月1日至1月5日

时间:2017-11-24 13:40:48

标签: php date

尝试使用以下公式编写IF语句以显示圣诞节开放时间,如果今天的日期是12月1日到1月5日,否则显示正常时间。但我所得到的只是正常时期。

$xmasStart = date('m-d', strtotime('11-01'));
$xmasEnd = date('m-d', strtotime('01-05'));
if((date('m-d') > $xmasStart) && (date('m-d') < $xmasEnd)) {
    echo 'Christmas Opening Hours';
} else {
    echo '<p class="marginbottom0">Monday to Friday: 8am - 6pm<br><small>Saturday &amp; Sunday: Appointment only</small></p>';
}

2 个答案:

答案 0 :(得分:4)

不要使用字符串来进行日期数学运算。使用更清晰,更易于理解的DateTime()

DateTime()个对象具有可比性,因此您无需将它们转换为字符串即可进行比较。此外,它是时区和夏令时的时间(这里没有发挥作用,但在其他时候可能会使用日期)。

<?php

$xmasStart = new DateTime('11/1 00:00:00');
$xmasEnd = new DateTime('1/5 23:59:59');
$now = new DateTime();
if($now >= $xmasStart && $now < $xmasEnd) {
    echo 'Christmas Opening Hours';
} else {
    echo '<p class="marginbottom0">Monday to Friday: 8am - 6pm<br><small>Saturday &amp; Sunday: Appointment only</small></p>';
}

此外,我将每天的时间添加为DateTime,strtottime()将使用当前时间而不是每天的开始或结束,因此在圣诞节的最后一天您将无法显示正确的时间小时。 (您也可以将最后一天更改为1/6 00:00:00)。

Demo

答案 1 :(得分:2)

strtotime无法理解您的短时间定义,请尝试以Y-m-d格式(2017-12-012018-01-05分别使用完整日期)。另请注意,您的比较不包括边缘日期,因此您可能希望使用<=>=

$xmasStart = date('Y-m-d', strtotime('2017-12-01'));
$xmasEnd = date('Y-m-d', strtotime('2018-01-05'));
$now = date('Y-m-d');
if(($now >= $xmasStart) && ($now <= $xmasEnd)) {
    echo 'Christmas Opening Hours';
} else {
    echo '<p class="marginbottom0">Monday to Friday: 8am - 6pm<br><small>Saturday &amp; Sunday: Appointment only</small></p>';
}