sql >> Database teknologi >  >> RDS >> Mysql

Opdel datointervaller i tilsvarende uger

Dette uddrag bruger søndag som den første dag i ugen:

    $start = new DateTime('2014-10-01');
    $end = new DateTime('2014-10-31 23:59');
    $interval = new DateInterval('P1D');
    $dateRange = new DatePeriod($start, $interval, $end);

    $weekNumber = 1;
    $weeks = array();
    foreach ($dateRange as $date) {
        $weeks[$weekNumber][] = $date->format('Y-m-d');
        if ($date->format('w') == 6) {
            $weekNumber++;
        }
    }
 

Hver uge vil have alle dagene i sig.

Hvis du bare vil have den første og sidste dag i hver uge, kan du bare bruge array_shift og array_pop at få dem. For eksempel kan du i den første uge bruge:

    $wk1Start = array_shift($weeks[1]); //gives you first day of week 1
    $wk1End = array_pop($weeks[1]); // give you the last day of week 1
 

Hvis du vil have start- og slutdatoerne for hver uge, er her en måde at gøre det på:

    $ranges = array_map(function($week) {
        return 'start: ' . array_shift($week) 
            . ', end: ' . array_pop($week); },
    $weeks);
 

Dette er output fra $ranges for mig:

Array ( [1] => start: 2014-10-01, end: 2014-10-04 [2] => start: 2014-10-05, end: 2014-10-11 [3] => start: 2014-10-12, end: 2014-10-18 [4] => start: 2014-10-19, end: 2014-10-25 [5] => start: 2014-10-26, end: 2014-10-31 )

  1. Sådan viser du MySQL-processer

  2. java.lang.ClassNotFoundException:org.postgresql.Driver

  3. Sådan tilføjes fremmednøgle i SQL?

  4. SELECT * fra SQL-tabel ved hjælp af forberedt sætning