计算每月的第三个星期一

时间:2014-03-31 05:06:05

标签: php date webpage

我进行了搜索和搜索,但似乎无法找到任何适合我想要做的事情,而且我似乎无法弄清楚如何使其发挥作用。

以下是过度观点: 我的电脑俱乐部在每个月的第三个星期一开会,俱乐部董事会会议一周后举行。在我们的俱乐部网站上,他们每月手动更改此日期...... :(

我正在尝试使用PHP自动化它。我有一点运气,但在大多数情况下它不会出现。

以下是我正在使用的代码示例:

//Set Default Time Zone
date_default_timezone_set('America/New_York');

//Define Variables Needed
$now = date("U");
$currmonth = date("n");
$curryear = date("Y");
$monthyear = date("F Y");
$thirdmon = date('U', strtotime($monthyear.' third monday'));
$thirdtue = date('U', strtotime($monthyear.' third tuesday'));

//Check for current date before or after third monday of the current meeting month
if ($now > $thirdtue) {
    $monthyear = date("F Y", strtotime('next month'));
    $thirdmon = date('U', strtotime($monthyear.' third monday'));
}

echo date("l F d, Y", $thirdmon);

我添加了$ thirdtue变量,因为检查$ thirdmon变量导致实际会议日期出现问题,并且跳转到下个月的会议日期,所以我检查第三个Tues并且直到现在是会议日期的午夜。

现在奇怪的是,我在2014年3月30日正在进行此项工作,它将在2014年4月21日作为下一个会议日期正确显示。当时间到午夜00:00,日期变为2014年3月31日,会议日期变为2014年5月19日!?!?!

我在代码的其他几个部分也遇到了其他一些计算的问题,但我想如果我可以解决这个问题,那么我应该可以解决其余问题。

任何人都可以告诉我,我会在这个轨道上脱颖而出吗?

2 个答案:

答案 0 :(得分:4)

$third_monday = new DateTime('third monday of this month');

// if date has passed, get next month's third monday
if ($third_monday < new DateTime()) {
    $third_monday->modify('third monday of next month');
}

echo $third_monday->format('l F d, Y');

答案 1 :(得分:0)

我对php没有太多经验,但我把它扔在了一起。它已经过测试,似乎有效。

<?php
   date_default_timezone_set('America/New_York');

   $currmonth = date("n");
   $curryear = date("Y");
   $currthirdmon =  date("d", strtotime("third monday", mktime(0,0,0,$currmonth,1,$curryear)));

   if ($currthirdmon < date("d"))
   {
    $nextmeeting = date("l F d, Y", strtotime("third monday", mktime(0,0,0,$currmonth+1,1,$curryear)));
   }
   else
   {
     $nextmeeting = date("l F d, Y", strtotime("third monday", mktime(0,0,0,$currmonth,1,$curryear)));
   }

   print $nextmeeting;
?>