【问题标题】:Get array of dates seperated by weeks for a given month and year in php在php中获取给定月份和年份的日期数组,以周分隔
【发布时间】:2018-01-21 02:07:49
【问题描述】:

您好,我正在从表单中收集月份和年份,并希望生成一个包含该特定月份的日期数的数组,以周分隔,假设 sunday 作为一周的开始。

例如,如果输入是month=Januaryyear=2018,那么想要的结果是

$array_of_dates =Array ( [Week 1] => '01/01/2018',.....,'06/01/2018'
                         [Week 2] => '07/01/2018',.....,'13/01/2018' 
                         [Week 3] => '14/01/2018',.....,'20/01/2018'
                         [Week 4] => '21/01/2018',.....,'27/01/2018' 
                         [Week 5] => '28/01/2018',.....,'31/01/2018' ) 

我试过了

function weeks_in_month($month, $year) {
   $start = mktime(0, 0, 0, $month, 1, $year);
   $end = mktime(0, 0, 0, $month, date('t', $start), $year);
   $start_week = date('W', $start);
   $end_week = date('W', $end);

if ($end_week < $start_week) { // Month wraps
  return ((52 + $end_week) - $start_week) + 1;
}

return ($end_week - $start_week) + 1;
}

但这只是给了我那个月的周数。

【问题讨论】:

  • 我找到了这个主题,可能对你有帮助。 stackoverflow

标签: php arrays multidimensional-array


【解决方案1】:

我会使用 DateTime 类来获得方便的方法,例如 add 来增加天数,format 来获取一个月中的总天数以及一周中的相应天数。

演示:https://3v4l.org/IKGMG

function weeks_in_month($month, $year)
{
    $dates = [];

    $week = 1;
    $date = new DateTime("$year-$month-01");
    $days = (int)$date->format('t'); // total number of days in the month

    $oneDay = new DateInterval('P1D');

    for ($day = 1; $day <= $days; $day++) {
        $dates["Week $week"] []= $date->format('d/m/Y');

        $dayOfWeek = $date->format('l');
        if ($dayOfWeek === 'Saturday') {
            $week++;
        }

        $date->add($oneDay);
    }

    return $dates;
}

print_r(weeks_in_month(1, 2018));
Array
(
    [Week 1] => Array
        (
            [0] => 01/01/2018
            [1] => 02/01/2018
            [2] => 03/01/2018
            [3] => 04/01/2018
            [4] => 05/01/2018
            [5] => 06/01/2018
        )

    [Week 2] => Array
        (
            [0] => 07/01/2018
            [1] => 08/01/2018
            [2] => 09/01/2018
            [3] => 10/01/2018
            [4] => 11/01/2018
            [5] => 12/01/2018
            [6] => 13/01/2018
        )

    [Week 3] => Array
        (
            [0] => 14/01/2018
            [1] => 15/01/2018
            [2] => 16/01/2018
            [3] => 17/01/2018
            [4] => 18/01/2018
            [5] => 19/01/2018
            [6] => 20/01/2018
        )

    [Week 4] => Array
        (
            [0] => 21/01/2018
            [1] => 22/01/2018
            [2] => 23/01/2018
            [3] => 24/01/2018
            [4] => 25/01/2018
            [5] => 26/01/2018
            [6] => 27/01/2018
        )

    [Week 5] => Array
        (
            [0] => 28/01/2018
            [1] => 29/01/2018
            [2] => 30/01/2018
            [3] => 31/01/2018
        )

)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    • 2021-05-11
    • 1970-01-01
    相关资源
    最近更新 更多