【问题标题】:How to get the start date and end date of every week in current month using mysql?如何使用mysql获取当月每周的开始日期和结束日期?
【发布时间】:2018-07-24 05:30:42
【问题描述】:

我希望结果是这样的:-

|----------------------------------------------|
| Week Number |   start date  |    end date    |
|----------------------------------------------|
|      1      |   2018-02-01  |    2018-02-04  |
|----------------------------------------------|
|      2      |   2018-02-05  |    2018-02-11  |
|----------------------------------------------|
|      3      |   2018-02-12  |    2018-02-18  |
|----------------------------------------------|
|      4      |   2018-02-19  |    2018-02-25  |
|----------------------------------------------|
|      5      |   2018-02-26  |    2018-02-28  |
|----------------------------------------------|

因为 2018 年 2 月的第一天是星期四,所以第一周是从 1 点到 4 点(紧接的星期日)。

我有一个查询,它提供了到目前为止所有星期的开始日期和结束日期。

$currentWeekData = $this->CustomerPayment->query('SELECT WEEK(CURDATE()) AS current_week');
$currentWeek = $currentWeekData[0][0]['current_week'];
for($w = 0; $w <= $currentWeek; $w++)
{
    $flagPay = 0;
    $flagDep = 0;
    $actualWeek = intval($w + 1);
    $currentYear = date('Y');
    $currentYearFirstDay = $currentYear.'-01-01';
    $queryWeekRange = "SELECT '$currentYearFirstDay'+INTERVAL ($actualWeek-WEEK('$currentYearFirstDay', 1))*7 - WEEKDAY('$currentYearFirstDay') DAY as start_date,'$currentYearFirstDay'+INTERVAL ($actualWeek-WEEK('$currentYearFirstDay', 1)+1)*7-1 - WEEKDAY('$currentYearFirstDay') DAY as end_date";
    $resultWeekRange = $this->CustomerPayment->query($queryWeekRange);
}

但我希望查询仅列出当前月份的每周范围。我该怎么做?

【问题讨论】:

标签: mysql date


【解决方案1】:

我必须同意@schwern,您真的需要在数据库中执行此操作吗?这在 PHP 中会更有效率。除了几行确实(但我怀疑一个相当简单的 MySQL 查询实际上可以实现您的要求)。

我会在 PHP 中做这样的事情(但我不保证这是最有效的方法)。

$currentMonth = 12; //Could be date("n") or 1-12
$currentYear = date('Y'); //Could also be any year
$firstDate = strtotime("$currentYear-$currentMonth-1");
$lastDate = strtotime(date('Y-m-t', $firstDate));
$isLastDayPassed = false;
$loopingDate = $firstDate;
$weeks = [];
$weekNumber = 1;
while(!$isLastDayPassed){
    if(date("n", $loopingDate) != $currentMonth){
        $isLastDayPassed = true;
        continue;
    }
    $firstDayOfWeek = date('w', $loopingDate) == 1 ? date('Y-m-d', $loopingDate) : date('Y-m-d', $loopingDate);
    $lastDayOfWeek = date("n", strtotime("next sunday", $loopingDate)) == $currentMonth ? date('Y-m-d', strtotime("next sunday", $loopingDate)) : date('Y-m-d', $lastDate);

    $weeks[] = [
        "start_date" => $firstDayOfWeek,
        "end_date" => $lastDayOfWeek,
        "week_number" => $weekNumber
    ];
    $loopingDate = strtotime("next monday", $loopingDate);
    $weekNumber++;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-21
    • 2022-12-11
    相关资源
    最近更新 更多