我怎么知道今天是在圣诞节和主显节之间用PHP?

时间:2017-05-29 08:20:52

标签: php date strtotime

我认为这将是一个轻而易举的事情,但我发现它比我想象的更难。

每天,我想检查今天是否在圣诞节(12月25日)和主显节(1月6日)之间,即圣诞节。

我所遇到的问题与年份有关,因为当年中期会发生变化。

我的基本if语句是:

$this_year_today = date("d-M-Y");
$christmas = date('d-M-Y', strtotime("25 December ".$year));
$epiphany = date('d-M-Y', strtotime("6 January ".$year));

if(($this_year_today >= $christmas) && ($this_year_today < $epiphany)){
      $season= "Christmastide";}

但如果今天是2017年圣诞节之后,那么顿悟日期是2018年,但如果今天是顿悟之前,那么圣诞节是2016年。请稍微做点头。什么是最简单的方法。我试着用strtotime说'#34;去年圣诞节&#34;但似乎没有工作......

THX

4 个答案:

答案 0 :(得分:1)

试试这个,不需要与年份混淆。

$current_day = date('j'); //get Day of the month without leading zeros
$current_month = date('n'); //get Numeric representation of a month, without leading zeros
$season = '';
switch($current_month):
    case 1:
        $season = $current_day<=6 ? 'Christmastide' : 'Not Christmastide';            
        break;
    case 12:
        $season = $current_day>=25 ? 'Christmastide' : 'Not Christmastide';
        break;
    default: 
        $season = 'Not Christmastide';
        break;
endswitch;
echo $season;

Demo

答案 1 :(得分:1)

function isChristmastide() {
    $month = date('n');
    $day = date('j');
    return ($month == 12 && $day >= 25) || ($month == 1 && $day <= 6);
}

echo isChristmastide() ? 'Ho ho ho' : 'No no no';

其他选择:

$today = date('nj');
return 1225 <= $today || $today <= 16;

虽然我觉得可读性有问题。

答案 2 :(得分:0)

未经测试,但也许你可以尝试使用数值来计算时间而不是日期?

"The moon is out"

答案 3 :(得分:0)

感谢frankiehf,现在应该是答案:

$month = date('M');
$year = date('Y');
$last_year = $year-1;
$next_year = $year+1;

if($month == "Jan"){
  $christmas = date('d-M-Y', strtotime("25 December ".$last_year));
    $epiphany = date('d-M-Y', strtotime("6 January ".$year));}
else{
  $christmas = date('d-M-Y', strtotime("25 December ".$year));
    $epiphany = date('d-M-Y', strtotime("6 January ".$next_year));}

if(($this_year_today >= $christmas) && ($this_year_today < $epiphany)){
      $season= "Christmastide";}