php - 如何获取给定月份中每周的日期间隔?

标签 php date

有没有办法在给定一个月的 PHP 中获取每周的开始/结束日期? 因此,例如,如果我参加这个月(2011 年 11 月),我需要返回

30 Oct ->  5 Nov
 6 Nov -> 12 Nov
13 Nov -> 19 Nov
20 Nov -> 26 Nov
27 Nov ->  3 Dec

乐:

这是我做的,以防其他人需要它。代码不是很漂亮,但它可以满足我的需要。

public function getMonthWeeks($month, $year)
{
    $month = intval($month);

    if ($month < 1) {
        $month = 1;
    }

    if ($month > 12) {
        $month = 12;
    }

    $tsfdOfMonth = mktime(0, 0, 0, $month, 1, $year);
    $dayOfWeek   = idate('w', $tsfdOfMonth);

    $tIntervalStart = $tsfdOfMonth;
    $tNextMonth     = idate('m', strtotime("+1 month", $tsfdOfMonth));

    if ($dayOfWeek > 0) {
        $tStr = sprintf("-%d %s",
            $dayOfWeek,
            $dayOfWeek == 1 ? 'day' : 'days'
        );
        $tIntervalStart = strtotime($tStr, $tsfdOfMonth);
    }

    $resultDates = array();

    $tsStart = $tIntervalStart;
    $tsEnd   = strtotime('+6 days', $tsStart);

    while (true) {
        $rObj = new stdClass;
        $rObj->LinkStr = sprintf("%s %s - %s %s",
            date('M', $tsStart), date('d', $tsStart),
            date('M', $tsEnd),   date('d', $tsEnd)
        );
        $rObj->DateStart = date('Y-m-d', $tsStart);
        $rObj->DateEnd   = date('Y-m-d', $tsEnd);

        $resultDates[] = $rObj;

        if (idate('m', strtotime('+1 day',  $tsEnd)) == $tNextMonth) {
            break;
        }

        $tsStart = strtotime('+1 day',  $tsEnd);
        $tsEnd   = strtotime('+6 days', $tsStart);
    }

    return $resultDates;
}

最佳答案

你必须写一个函数:

算法:

  1. 获取一个月的第一天。
  2. 减去到达星期日所需的天数——您现在有该月第一个“星期日”的日期(可能是上个月的最后一个星期日)。
  3. 加上六天以确定该周的星期六。
  4. 加一天确定下周星期日。
  5. 重复 3 和 4 直到我们不再在当月

两个功能非常有用:$saturdaytimestamp = strtotime("+6 days", $sundaytimestamp)$dayofweek = idate('w', $timestamp);

关于php - 如何获取给定月份中每周的日期间隔?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8307805/

相关文章:

php - 如何在 PHP 中使用 api v4 从 Google Sheets 中删除行

php - 无法从 PDO-Database 类实例化对象

javascript - 使用 Date 对象比较日期而不改变它们

javascript - 如何根据它相对于另一个 div 的位置更新一个 div

javascript - 如何根据日期属性之间的范围是否包含给定日期来过滤对象数组?

php - 登录页面无法使用有效凭据(PHP 和 MySQL)

php - 如何在mysql中根据最近日期选择记录

php - 在 MySQL 中打破一个特殊字符

php - mysql查询以不同的格式获取特定日期的数据

javascript - 为什么 new Date() 在 Javascript 中减去 1 天?