PHP仅使用php获取当月的星期数 [英] PHP get number of week for current month only using php

查看:70
本文介绍了PHP仅使用php获取当月的星期数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的星期数组。我尝试使用下面的代码,当前月份 9 和年份 2017

Here, is my week array. The current month 9 and year 2017, I tried below code,

function getWeekDates($date, $start_date, $end_date) {
    $week = date('W', strtotime($date));
    $year = date('Y', strtotime($date));
    $from = date("Y-m-d", strtotime("{$year}-W{$week}+1"));

    if ($from < $start_date)
        $from = $start_date;

    $to = date("Y-m-d", strtotime("{$year}-W{$week}-7"));
    if ($to > $end_date)
        $to = $end_date;

    $array1 = array(
        "ssdate" => $from,
        "eedate" => $to,
    );

    return $array1;
}

$mm = date('m');
$yy = date('y');
$startdate = date($yy . "-" . $mm . "-01");
$current_date = date('Y-m-t');
$ld = cal_days_in_month(CAL_GREGORIAN, $mm, $yy);
$lastday = $yy . '-' . $mm . '-' . $ld;
$start_date = date('Y-m-d', strtotime($startdate));
$end_date = date('Y-m-d', strtotime($lastday));
$end_date1 = date('Y-m-d', strtotime($lastday . " + 7 days"));
$count_week = 0;
$week_array = array();

for ($date = $start_date; $date < $end_date1; $date = date('Y-m-d', strtotime($date . ' + 7 days'))) {
    $getarray = getWeekDates($date, $start_date, $end_date);
    $week_array[] = $getarray;
    $count_week++;
}
echo '<pre>';
print_r($week_array);

我从 PHP获取每月的周数此链接。

这是我的星期数组:

Array
(
    [0] => Array
        (
            [ssdate] => 2017-09-01
            [eedate] => 2017-09-03
        )

    [1] => Array
        (
            [ssdate] => 2017-09-04
            [eedate] => 2017-09-10
        )

    [2] => Array
        (
            [ssdate] => 2017-09-11
            [eedate] => 2017-09-17
        )

    [3] => Array
        (
            [ssdate] => 2017-09-18
            [eedate] => 2017-09-24
        )

    [4] => Array
        (
            [ssdate] => 2017-09-25
            [eedate] => 2017-09-30
        )

    [5] => Array
        (
            [ssdate] => 2017-10-02
            [eedate] => 2017-09-30
        )

)

但我只想要当前月份数组,例如以下

 Array
(
    [0] => Array
        (
            [sdate] => 2017-09-01
            [sdate] => 2017-09-02
            [sdate] => 2017-09-03
        )

    [1] => Array
        (
            [sdate] => 2017-09-04
            [sdate] => 2017-09-05
            [sdate] => 2017-09-06
            [sdate] => 2017-09-07
            [sdate] => 2017-09-08
            [sdate] => 2017-09-09
            [sdate] => 2017-09-10
        )
     [2] => Array
        (
            [sdate] => 2017-09-11
            [sdate] => 2017-09-12
            [sdate] => 2017-09-13
            [sdate] => 2017-09-14
            [sdate] => 2017-09-15
            [sdate] => 2017-09-16
            [sdate] => 2017-09-17
            [sdate] => 2017-09-18
        )

    [3] => Array
        (
            [sdate] => 2017-09-18
            [sdate] => 2017-09-19
            [sdate] => 2017-09-20
            [sdate] => 2017-09-21
            [sdate] => 2017-09-22
            [sdate] => 2017-09-23
            [sdate] => 2017-09-24
        )

    [4] => Array
        (
            [sdate] => 2017-09-25
            [sdate] => 2017-09-26
            [sdate] => 2017-09-27
            [sdate] => 2017-09-28
            [sdate] => 2017-09-29
            [sdate] => 2017-09-30
        )
)

请帮助我解决此问题

预先感谢!!!

推荐答案

如果您想要当前月份的数据,那么为什么要比较 $ end_date1 (距离前一天+7天)。您需要在for循环中添加 $ end_date 的条件。更改循环如下:

if you want current month data then why are you comparing $end_date1 (which is +7 days from last day). You need to add condition for $end_date in for loop. change for loop as below :

for ($date = $start_date; $date < $end_date; $date = date('Y-m-d', strtotime($date . ' + 7 days'))) {
    $getarray = getWeekDates($date, $start_date, $end_date);
    $week_array[] = $getarray;
    $count_week++;
}

编辑根据您的评论,当出现问题时一个月31天。因此,我更改了一些代码。试试吧。更改 function getWeekDates 如下:

EDIT as per your comment there is issue when 31 days month. So I have change some code. try it. change function getWeekDates as below:

function getWeekDates($date, $start_date, $end_date) {
    $week = date('W', strtotime($date));
    $year = date('Y', strtotime($date));
    $from = date("Y-m-d", strtotime("{$year}-W{$week}+1"));

    if ($from < $start_date)
        $from = $start_date;

    $to = date("Y-m-d", strtotime("{$year}-W{$week}-7"));
    if ($to > $end_date)
        $to = $end_date;
    if($from > $end_date)
    {
      $array1 = array(
    );
    }
    else
    {
      $array1 = array(
        "ssdate" => $from,
        "eedate" => $to,
    );
    }


    return $array1;
}

然后更改循环如下:

for ($date = $start_date; $date <= $end_date1; $date = date('Y-m-d', strtotime($date . ' + 7 days'))) {    
    $getarray = getWeekDates($date, $start_date, $end_date);
    if(count($getarray))
    {
      $week_array[] = $getarray;
      $count_week++;  
    }


}

这篇关于PHP仅使用php获取当月的星期数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆