2009-02-13 97 views
5

Bit停留在如何去做这个。鉴于当前的月份,我需要返回每个月的第四个星期六的日期。在当月第四个星期六的日期

例如本月将是2月20日,接下来是3月27日。

感谢

+0

顺便说一下,这将是二月和三月二十八号。 – kmkaplan 2009-02-13 17:40:04

+0

不是偶然的,因为2月有28天可以被7整除。当然不是闰年。 – 2009-11-29 14:03:48

回答

7

我不是一个PHP编码器,但是,它似乎是的strtotime你追求的。

您可以使用strtotime(“第四个星期六”),它将返回第4个星期六。

查看strtotime文档。

编辑:

只是为了回答完整,感谢汤姆和保罗·迪克森

date('dS F',strtotime('Fourth Saturday '.date('F o'))); 
2

查找每月的第一个星期六,再用三层的数周内新增了这一点。

如果你不知道第一个星期六是什么时候(或者更确切地说不知道与某个日期名称对应的日期),你可能想看看Doomsday algorithm,我很方便地查看了另一个日期有一个类似的问题。

3

第四个星期六的最早日期是本月22日。所以看看22日,看看星期几是什么时候,如果不是星期六,再加上一天的日期,然后再次检查,直到找到一场比赛(最多不得不检查6天)。

-1
在PHP,而不是伪代码

(认为需要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 
+0

为什么这会得到downvoted?它应该是“!=星期六”而不是“!=星期日“,但过程看起来是正确的... – 2009-02-13 17:05:01

+0

完全错过了周六/周日的事情,tah – ShuggyCoUk 2009-02-13 17:16:13

7

您可以使用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编码器”日察觉那:)

0
function fourth_saturday($year, $month) 
{ 
    $info = localtime(mktime(0, 0, 0, $month , 1, $year)); 
    return 28 - $info[6]; 
} 
相关问题