php - 以周为单位分配一个月,并包含开始日期和结束日期数组

标签 php date time

我正在制作一个函数,将当前月份分解为一系列周,每周都有其开始和结束日期。例如,当前月份是九月,所以这是我期望函数返回的内容:

$week_arr[1]['start'] = '1-09-2014';
$week_arr[1]['end'] = '7-09-2014';
$week_arr[2]['start'] = '8-09-2014';
$week_arr[2]['end'] = '14-09-2014';
/*
.
.
.
*/
$week_arr[5]['start'] = '29-09-2014';
$week_arr[5]['end'] = '30-09-2014';

据我了解,只有非闰二月才会有 4 周。 这是我到目前为止所拥有的

$no_of_days_in_month = date("t");
$no_of_weeks = (ceil(intval($no_of_days_in_month)/7));

$week_inc = 0;
$curr_month_year = date("m-Y");

$week_arr = array();
for($i = 1; $i <= $no_of_weeks; $i++){
    $week_arr[$i]['start'] = ($week_inc+1)."-".$curr_month_year;
    $week_arr[$i]['end'] = ($week_inc+7)."-".$curr_month_year;
    $week_inc += 7;
}
var_dump($week_arr);

它几乎可以正常工作,只是我希望它在上周该月的最后一天停止。 上面的代码在本周的 5th 索引方面存在问题。结果

  $week_arr[5]['start'] = '29-09-2014'
  $week_arr[5]['end'] = '35-09-2014'

如何解决这个问题?

感谢您的回答。

最佳答案

您可以在 for 循环的开头添加一个检查,以便在结束日期大于该月的天数时停止处理:

if($week_inc + 7 > $no_of_days_in_month)
    break;

Output

或者,如果您仍然希望结束时有部分周,您可以使用类似的检查来定义最后一天应该是什么:

for($i = 1; $i <= $no_of_weeks; $i++){
    if($week_inc + 7 > $no_of_days_in_month)
        $day = $no_of_days_in_month;
    else
        $day = $week_inc + 7;

    $week_arr[$i]['start'] = ($week_inc+1)."-".$curr_month_year;
    $week_arr[$i]['end'] = $day."-".$curr_month_year;
    $week_inc += 7;
}

You'll then get结束时的部分一周:

[5] => Array
    (
        [start] => 29-09-2014
        [end] => 30-09-2014
    )

关于php - 以周为单位分配一个月,并包含开始日期和结束日期数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25615971/

相关文章:

文件名中的 PHP 变量

php - 在 laravel 5.3 中设置 cors

Java如何将2011-11-06T14 :34:16. 679+02:00设置为XMLGregorianCalendar

java - 推荐用于 Joda-Time 的 DateMidnight

r - 强制 ggplot 比例开始,例如第一年,第一个月等

Python - 日期时间时间始终为零

Javascript:如何以毫秒计算一天的开始?

php - Ajax 和 PHP 提交

javascript - 在 JavaScript 中以 12 小时格式显示时间

php - 如何仅在字符串中查找完整的单词