如何从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中的两个日期范围内提取每个星期一和每两周一次的星期一?的主要内容,如果未能解决你的问题,请参考以下文章

获取两个日期范围内的上周日(GMT、DST)

如何从 iOS 中两个日期范围内的照片库中获取图像?

Java:检查当前日期是不是在特定日期范围内[重复]

统计日期范围内的天数

使用 oracle SQL 查找日期范围内的星期几

计算日期范围内的星期六和星期日的数量 - oracle [重复]