【问题标题】:How to extract every Monday and every fortnightly Monday from a range of two dates in PHP?如何从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 也很好 :)

标签: php jquery algorithm datepicker date-range


【解决方案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
猜你喜欢
  • 2019-12-29
  • 1970-01-01
  • 2014-07-24
  • 2020-10-09
  • 1970-01-01
  • 2016-01-22
  • 2012-11-27
  • 2012-05-23
  • 1970-01-01
相关资源
最近更新 更多