我认为这将是一个轻而易举的事情,但我发现它比我想象的更难。
每天,我想检查今天是否在圣诞节(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
答案 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;
答案 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";}