在当月第四个星期六的日期
我不是一个PHP编码器,但是,它似乎是的strtotime你追求的。
您可以使用strtotime(“第四个星期六”),它将返回第4个星期六。
查看strtotime
文档。
编辑:
只是为了回答完整,感谢汤姆和保罗·迪克森
date('dS F',strtotime('Fourth Saturday '.date('F o')));
查找每月的第一个星期六,再用三层的数周内新增了这一点。
如果你不知道第一个星期六是什么时候(或者更确切地说不知道与某个日期名称对应的日期),你可能想看看Doomsday algorithm,我很方便地查看了另一个日期有一个类似的问题。
第四个星期六的最早日期是本月22日。所以看看22日,看看星期几是什么时候,如果不是星期六,再加上一天的日期,然后再次检查,直到找到一场比赛(最多不得不检查6天)。
(认为需要5.2)
$date = getdate();
$date-> setDate($date->format('Y'), $date->format('Y'), '1'); // 1st of month.
while ($date->format('w' != 6)
$date->modify("+1 day");
$date->modify("+21 day"); // date is now on the fourth saturday
为什么这会得到downvoted?它应该是“!=星期六”而不是“!=星期日“,但过程看起来是正确的... – 2009-02-13 17:05:01
完全错过了周六/周日的事情,tah – ShuggyCoUk 2009-02-13 17:16:13
您可以使用strtotime基础上找到一个起始日期“下周六”。如果开始日期是最早的可能前一天(21日),我们得到的答案的前一天......
//required year/month
$yyyymm="2009-01";
//find next saturday after earliest possible date
$t=strtotime("next saturday", strtotime("{$yyyymm}-21"));
//here you go!
echo "4th saturday of $yyyymm is ".strftime("%Y-%m-%d",$t)."\n";
早到了一天的任何一个月可能四重是22日(1,8,15, 22),最后可能的第4次重复是第28次(7,14,21,28)。
编辑:虽然目前还不清楚该文档中,你可以要求“第四个星期六”太 - 使用月份的0天为基础:
$t=strtotime("fourth saturday", strtotime("{$yyyymm}-00"));
或省略的基础上的时间和直接指定月份和年份:
$t=strtotime("fourth saturday feb 2009");
帽子罗宾一角“我不是一个PHP编码器”日察觉那:)
function fourth_saturday($year, $month)
{
$info = localtime(mktime(0, 0, 0, $month , 1, $year));
return 28 - $info[6];
}
顺便说一下,这将是二月和三月二十八号。 – kmkaplan 2009-02-13 17:40:04
不是偶然的,因为2月有28天可以被7整除。当然不是闰年。 – 2009-11-29 14:03:48