Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Podziel zakresy dat na odpowiednie tygodnie

Ten fragment kodu używa niedzieli jako pierwszego dnia tygodnia:

    $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++;
        }
    }

Każdy tydzień będzie zawierał wszystkie dni.

Jeśli chcesz tylko pierwszego i ostatniego dnia każdego tygodnia, możesz po prostu użyć array_shift i array_pop aby je zdobyć. Na przykład przez pierwszy tydzień możesz użyć:

    $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

Jeśli chcesz poznać daty rozpoczęcia i zakończenia każdego tygodnia, oto sposób na zrobienie tego:

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

To jest wynik $ranges dla mnie:

    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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySql:Pokaż kolumny, ale wyklucz wszystko oprócz nazw pól

  2. Odpytywanie bazy danych PHP/SQL o dobre praktyki i bezpieczeństwo

  3. Usuń wszystkie procedury składowane w MySQL lub użyj tymczasowych procedur składowanych

  4. Wybierz, gdzie liczba jednego pola jest większa niż jeden

  5. PHP MySQL pobiera lokalizacje w lokalizacji użytkownika w promieniu z GPS