首页 > 后端开发 > php教程 > 怎么获得一段时间内的完整星期的数量SegmentFault

怎么获得一段时间内的完整星期的数量SegmentFault

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
发布: 2016-06-06 20:19:43
原创
1495 人浏览过

怎么获得一段时间内的完整星期(周一到周末)的数量php 有什么比较好的方法

回复内容:

怎么获得一段时间内的完整星期(周一到周末)的数量php 有什么比较好的方法

额。。。需要那么复杂吗

1

2

3

4

5

6

function get_weekend_days($start, $end) {

    $days = (strtotime($end) - strtotime($start)) / 86400;

    return floor($days / 7);

}

 

echo get_weekend_days('2014-02-03', '2015-12-28');

登录后复制

update 2016/01/20 13:34:07
Code

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

<?php

/*  作用由起止日期算出其中的周

 *  @param start_date 开始日期

 *  @param end_date   结束日期

 *  @return 返回二维数组,含每周起止时间

 *  @author anngly

 *  @modify for segmentfault

 *  注意:end_date>state_date

 **/

function getWeek($start_date, $end_date)

{

    //设定每周开始时间  monday-sunday

    $week_start = "monday";

    //设定返回时间格式

    $date_format = "Ymd";

    $start_date = strtotime($start_date);

    $end_date = strtotime($end_date);

    if ($start_date <= $end_date) {

        $end_date = strtotime("last ".$week_start, $end_date);

        $start_date = date("w", $start_date) == 1 ? $start_date : strtotime("next ".$week_start, $start_date);

        $count_week = ($end_date - $start_date) / (7 * 24 * 3600);

        for ($i = 0; $i < $count_week; $i++) {

            $sd = date($date_format, $start_date);

            $ed = strtotime("+ 6 days", $start_date);

            $eed = date($date_format, $ed);

            $arr[] = array($sd, $eed);

            $start_date = strtotime("+ 1 day", $ed);

 

            //输出测试

            echo "第 ".($i + 1)." 周<br>";

            echo "开始".$sd."<br>";

            echo "结束".$eed."<br>";

        }

        return $arr;

    }

}

var_dump(getWeek("20160101", "20160120"));

?>

登录后复制

输出

1

2

3

4

5

6

7

第 1 周

开始20160104

结束20160110

第 2 周

开始20160111

结束20160117

array(2) { [0]=> array(2) { [0]=> string(8) "20160104" [1]=> string(8) "20160110" } [1]=> array(2) { [0]=> string(8) "20160111" [1]=> string(8) "20160117" } }

登录后复制

1

<code>DatePeriod</code>

登录后复制

拿到开始-结束的日期集合(摸我),然后遍历,如果:

1

<code>in_array(date('w', strtotime($date)), [0, 6])</code>

登录后复制


楼主又修改了问题,真崩溃啊

1

<code>strtotime('next monday');</code>

登录后复制

拿到下一个周一,DatePeriod步长设为7,遍历之。

  • 掐头(all_duration_seconds - ( ( 7 - ( day_of_week_at_begin -1 ) ) * seconds_of_day ) ),

  • 中间取模(n/seconds_of_week),

  • 去尾( rest_seconds > 0 ? 1 : 0 )

这样比较中庸吧

懒得改了, 标题没看清 -- 完整

相关标签:
php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
怎么学好php
来自于 1970-01-01 08:00:00
0
0
0
PHP扩展intl
来自于 1970-01-01 08:00:00
0
0
0
php数据获取?
来自于 1970-01-01 08:00:00
0
0
0
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板