• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

php 搞代码 3年前 (2022-01-25) 14次浏览 已收录 0个评论
文章目录[隐藏]

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

回复内容:

!本文来源gaodai.ma#com搞##代!^码网(

搞gaodaima代码

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

额。。。需要那么复杂吗

<code class="php">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');</code>

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

<code class="php"><?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"));?></code>

输出

<code class="php">第 1 周开始20160104结束20160110第 2 周开始20160111结束20160117array(2) { [0]=> array(2) { [0]=> string(8) "20160104" [1]=> string(8) "20160110" } [1]=> array(2) { [0]=> string(8) "20160111" [1]=> string(8) "20160117" } }</code>

<code>DatePeriod</code>

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

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

就 ++


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

<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 )

这样比较中庸吧

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


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:怎么获得一段时间内的完整星期的数量SegmentFault

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址