如何从PHP中的两个日期范围内提取每个星期一和每两周一次的星期一?
Posted
技术标签:
【中文标题】如何从PHP中的两个日期范围内提取每个星期一和每两周一次的星期一?【英文标题】:How to extract every Monday and every fortnightly Monday from a range of two dates in PHP? 【发布时间】:2011-09-24 23:24:47 【问题描述】:我正在使用臭名昭著的 jQuery UI 的 Datepicker,并在我的表单中选择两个日期的范围。
第一个代表开始日期,另一个代表结束日期。
我现在需要的是计算这两个日期之间的每个星期一的算法、一些提示和方向或助手。
例如:
start: 2011-06-01
end: 2011-06-30
应该提取我这 4(四)个星期一的约会日期:
1st: 2011-06-06
2nd: 2011-06-13
3rd: 2011-06-20
4th: 2011-06-27
我怎样才能做到这一点?
而且,我每两周的星期一都需要它:
两周一次的结果应该是:
1st: 2011-06-06
2rd: 2011-06-20
【问题讨论】:
您想要一个 php 解决方案(>> 您的帖子的标题)还是一个 javascript 解决方案(>> 您的帖子的标签)? PHP 会更受欢迎,但 JS 也很好 :) 【参考方案1】:$start = strtotime('2011-06-01');
$end = strtotime('2011-06-30');
$mondays=array();
while( $start <= $end )
if ( date('N',$start)==1 )
$mondays[]=$start;
$start += 86400; //> incrementing one day
//> i could have used strtotime('+1 day') but math sum is 10x faster
//> Untested
现在您的所有星期一都在 $mondays
数组中。
附录
请注意,+86400
可能会由于夏令时导致结果不一致。如果您的应用是关键任务,最好使用+1 day
strtotime('2010-10-31') + 86400
返回2010-10-31
【讨论】:
非常感谢我的朋友!这就是我一直在寻找的解决方案;)我有一天会给你买啤酒;) 我非常感谢你,因为 Stack Overflow 允许我我的朋友是的朋友! :) @metaforce:我在回复中添加了一些警告。照顾好这个【参考方案2】:function getAllMondays($from_date, $to_date)
// getting number of days between two date range.
$number_of_days = count_days(strtotime($from_date),strtotime($to_date));
for($i = 1; $i<=$number_of_days; $i++)
$day = Date('l',mktime(0,0,0,date('m'),date('d')+$i,date('y')));
if($day == 'Monday')
echo Date('d-m-Y',mktime(0,0,0,date('m'),date('d')+$i,date('y'))),'<br/>';
【讨论】:
count_days 是您添加的无用开销 đesi srbine, krava te ubola :D @yes123 我知道,这只是我给他的一个学校例子。以后需要定制:) 您无法使用 count_days 自定义此类示例。提供的脚本仅适用于 count_days以上是关于如何从PHP中的两个日期范围内提取每个星期一和每两周一次的星期一?的主要内容,如果未能解决你的问题,请参考以下文章