Echo all months with days calendar

后端 未结 5 1766
星月不相逢
星月不相逢 2021-02-06 20:12

I am using the code below to echo the current month. How can i enhance it so that is shows all the months with the names and days and dates..

Code:

 &         


        
5条回答
  •  慢半拍i
    慢半拍i (楼主)
    2021-02-06 20:32

    You can use this function to convert entire year into array

      function year2array($year) {
        $res = $year >= 1970;
        if ($res) {
          // this line gets and sets same timezone, don't ask why :)
          date_default_timezone_set(date_default_timezone_get());
    
          $dt = strtotime("-1 day", strtotime("$year-01-01 00:00:00"));
          $res = array();
          $week = array_fill(1, 7, false);
          $last_month = 1;
          $w = 1;
          do {
            $dt = strtotime('+1 day', $dt);
            $dta = getdate($dt);
            $wday = $dta['wday'] == 0 ? 7 : $dta['wday'];
            if (($dta['mon'] != $last_month) || ($wday == 1)) {
              if ($week[1] || $week[7]) $res[$last_month][] = $week;
              $week = array_fill(1, 7, false);
              $last_month = $dta['mon'];
              }
            $week[$wday] = $dta['mday'];
            }
          while ($dta['year'] == $year);
          }
        return $res;
        }
    

    Call it like

    print_r(year2array(2011));
    

    You'll see this in source (months->weeks->days):

    Array
    (
        [1] => Array
            (
                [0] => Array
                    (
                        [1] => 
                        [2] => 
                        [3] => 
                        [4] => 
                        [5] => 
                        [6] => 1
                        [7] => 2
                    )
    
                [1] => Array
                    (
                        [1] => 3
                        [2] => 4
                        [3] => 5
                        [4] => 6
                        [5] => 7
                        [6] => 8
                        [7] => 9
                    )
    
                [2] => Array
                    (
                        [1] => 10
                        [2] => 11
                        [3] => 12
                        [4] => 13
                        [5] => 14
                        [6] => 15
                        [7] => 16
                    )
    
                [3] => Array
                    (
                        [1] => 17
                        [2] => 18
                        [3] => 19
                        [4] => 20
                        [5] => 21
                        [6] => 22
                        [7] => 23
                    )
    
                [4] => Array
                    (
                        [1] => 24
                        [2] => 25
                        [3] => 26
                        [4] => 27
                        [5] => 28
                        [6] => 29
                        [7] => 30
                    )
    
                [5] => Array
                    (
                        [1] => 31
                        [2] => 
                        [3] => 
                        [4] => 
                        [5] => 
                        [6] => 
                        [7] => 
                    )
    
            )
    
        [2] => Array
            (
                [0] => Array
                    (
                        [1] => 
                        [2] => 1
                        [3] => 2
                        [4] => 3
                        [5] => 4
                        [6] => 5
                        [7] => 6
                    )
    
                [1] => Array
                    (
                        [1] => 7
                        [2] => 8
                        [3] => 9
                        [4] => 10
                        [5] => 11
                        [6] => 12
                        [7] => 13
                    )
    
                [2] => Array
                    (
                        [1] => 14
                        [2] => 15
                        [3] => 16
                        [4] => 17
                        [5] => 18
                        [6] => 19
                        [7] => 20
                    )
    
                [3] => Array
                    (
                        [1] => 21
                        [2] => 22
                        [3] => 23
                        [4] => 24
                        [5] => 25
                        [6] => 26
                        [7] => 27
                    )
    
                [4] => Array
                    (
                        [1] => 28
                        [2] => 
                        [3] => 
                        [4] => 
                        [5] => 
                        [6] => 
                        [7] => 
                    )
    
            )
    
        [3] => Array
            (
                [0] => Array
                    (
                        [1] => 
                        [2] => 1
                        [3] => 2
                        [4] => 3
                        [5] => 4
                        [6] => 5
                        [7] => 6
                    )
    
                [1] => Array
                    (
                        [1] => 7
                        [2] => 8
                        [3] => 9
                        [4] => 10
                        [5] => 11
                        [6] => 12
                        [7] => 13
                    )
    
                [2] => Array
                    (
                        [1] => 14
                        [2] => 15
                        [3] => 16
                        [4] => 17
                        [5] => 18
                        [6] => 19
                        [7] => 20
                    )
    
                [3] => Array
                    (
                        [1] => 21
                        [2] => 22
                        [3] => 23
                        [4] => 24
                        [5] => 25
                        [6] => 26
                        [7] => 27
                    )
    
                [4] => Array
                    (
                        [1] => 28
                        [2] => 29
                        [3] => 30
                        [4] => 31
                        [5] => 
                        [6] => 
                        [7] => 
                    )
    
            )
    
        [4] => Array
            (
                [0] => Array
                    (
                        [1] => 
                        [2] => 
                        [3] => 
                        [4] => 
                        [5] => 1
                        [6] => 2
                        [7] => 3
                    )
    
                [1] => Array
                    (
                        [1] => 4
                        [2] => 5
                        [3] => 6
                        [4] => 7
                        [5] => 8
                        [6] => 9
                        [7] => 10
                    )
    
                [2] => Array
                    (
                        [1] => 11
                        [2] => 12
                        [3] => 13
                        [4] => 14
                        [5] => 15
                        [6] => 16
                        [7] => 17
                    )
    
                [3] => Array
                    (
                        [1] => 18
                        [2] => 19
                        [3] => 20
                        [4] => 21
                        [5] => 22
                        [6] => 23
                        [7] => 24
                    )
    
                [4] => Array
                    (
                        [1] => 25
                        [2] => 26
                        [3] => 27
                        [4] => 28
                        [5] => 29
                        [6] => 30
                        [7] => 
                    )
    
            )
    
        [5] => Array
            (
                [0] => Array
                    (
                        [1] => 
                        [2] => 
                        [3] => 
                        [4] => 
                        [5] => 
                        [6] => 
                        [7] => 1
                    )
    
                [1] => Array
                    (
                        [1] => 2
                        [2] => 3
                        [3] => 4
                        [4] => 5
                        [5] => 6
                        [6] => 7
                        [7] => 8
                    )
    
                [2] => Array
                    (
                        [1] => 9
                        [2] => 10
                        [3] => 11
                        [4] => 12
                        [5] => 13
                        [6] => 14
                        [7] => 15
                    )
    
                [3] => Array
                    (
                        [1] => 16
                        [2] => 17
                        [3] => 18
                        [4] => 19
                        [5] => 20
                        [6] => 21
                        [7] => 22
                    )
    
                [4] => Array
                    (
                        [1] => 23
                        [2] => 24
                        [3] => 25
                        [4] => 26
                        [5] => 27
                        [6] => 28
                        [7] => 29
                    )
    
                [5] => Array
                    (
                        [1] => 30
                        [2] => 31
                        [3] => 
                        [4] => 
                        [5] => 
                        [6] => 
                        [7] => 
                    )
    
            )
    
        [6] => Array
            (
                [0] => Array
                    (
                        [1] => 
                        [2] => 
                        [3] => 1
                        [4] => 2
                        [5] => 3
                        [6] => 4
                        [7] => 5
                    )
    
                [1] => Array
                    (
                        [1] => 6
                        [2] => 7
                        [3] => 8
                        [4] => 9
                        [5] => 10
                        [6] => 11
                        [7] => 12
                    )
    
                [2] => Array
                    (
                        [1] => 13
                        [2] => 14
                        [3] => 15
                        [4] => 16
                        [5] => 17
                        [6] => 18
                        [7] => 19
                    )
    
                [3] => Array
                    (
                        [1] => 20
                        [2] => 21
                        [3] => 22
                        [4] => 23
                        [5] => 24
                        [6] => 25
                        [7] => 26
                    )
    
                [4] => Array
                    (
                        [1] => 27
                        [2] => 28
                        [3] => 29
                        [4] => 30
                        [5] => 
                        [6] => 
                        [7] => 
                    )
    
            )
    
        [7] => Array
            (
                [0] => Array
                    (
                        [1] => 
                        [2] => 
                        [3] => 
                        [4] => 
                        [5] => 1
                        [6] => 2
                        [7] => 3
                    )
    
                [1] => Array
                    (
                        [1] => 4
                        [2] => 5
                        [3] => 6
                        [4] => 7
                        [5] => 8
                        [6] => 9
                        [7] => 10
                    )
    
                [2] => Array
                    (
                        [1] => 11
                        [2] => 12
                        [3] => 13
                        [4] => 14
                        [5] => 15
                        [6] => 16
                        [7] => 17
                    )
    
                [3] => Array
                    (
                        [1] => 18
                        [2] => 19
                        [3] => 20
                        [4] => 21
                        [5] => 22
                        [6] => 23
                        [7] => 24
                    )
    
                [4] => Array
                    (
                        [1] => 25
                        [2] => 26
                        [3] => 27
                        [4] => 28
                        [5] => 29
                        [6] => 30
                        [7] => 31
                    )
    
            )
    
        [8] => Array
            (
                [0] => Array
                    (
                        [1] => 1
                        [2] => 2
                        [3] => 3
                        [4] => 4
                        [5] => 5
                        [6] => 6
                        [7] => 7
                    )
    
                [1] => Array
                    (
                        [1] => 8
                        [2] => 9
                        [3] => 10
                        [4] => 11
                        [5] => 12
                        [6] => 13
                        [7] => 14
                    )
    
                [2] => Array
                    (
                        [1] => 15
                        [2] => 16
                        [3] => 17
                        [4] => 18
                        [5] => 19
                        [6] => 20
                        [7] => 21
                    )
    
                [3] => Array
                    (
                        [1] => 22
                        [2] => 23
                        [3] => 24
                        [4] => 25
                        [5] => 26
                        [6] => 27
                        [7] => 28
                    )
    
                [4] => Array
                    (
                        [1] => 29
                        [2] => 30
                        [3] => 31
                        [4] => 
                        [5] => 
                        [6] => 
                        [7] => 
                    )
    
            )
    
        [9] => Array
            (
                [0] => Array
                    (
                        [1] => 
                        [2] => 
                        [3] => 
                        [4] => 1
                        [5] => 2
                        [6] => 3
                        [7] => 4
                    )
    
                [1] => Array
                    (
                        [1] => 5
                        [2] => 6
                        [3] => 7
                        [4] => 8
                        [5] => 9
                        [6] => 10
                        [7] => 11
                    )
    
                [2] => Array
                    (
                        [1] => 12
                        [2] => 13
                        [3] => 14
                        [4] => 15
                        [5] => 16
                        [6] => 17
                        [7] => 18
                    )
    
                [3] => Array
                    (
                        [1] => 19
                        [2] => 20
                        [3] => 21
                        [4] => 22
                        [5] => 23
                        [6] => 24
                        [7] => 25
                    )
    
                [4] => Array
                    (
                        [1] => 26
                        [2] => 27
                        [3] => 28
                        [4] => 29
                        [5] => 30
                        [6] => 
                        [7] => 
                    )
    
            )
    
        [10] => Array
            (
                [0] => Array
                    (
                        [1] => 
                        [2] => 
                        [3] => 
                        [4] => 
                        [5] => 
                        [6] => 1
                        [7] => 2
                    )
    
                [1] => Array
                    (
                        [1] => 3
                        [2] => 4
                        [3] => 5
                        [4] => 6
                        [5] => 7
                        [6] => 8
                        [7] => 9
                    )
    
                [2] => Array
                    (
                        [1] => 10
                        [2] => 11
                        [3] => 12
                        [4] => 13
                        [5] => 14
                        [6] => 15
                        [7] => 16
                    )
    
                [3] => Array
                    (
                        [1] => 17
                        [2] => 18
                        [3] => 19
                        [4] => 20
                        [5] => 21
                        [6] => 22
                        [7] => 23
                    )
    
                [4] => Array
                    (
                        [1] => 24
                        [2] => 25
                        [3] => 26
                        [4] => 27
                        [5] => 28
                        [6] => 29
                        [7] => 30
                    )
    
                [5] => Array
                    (
                        [1] => 31
                        [2] => 
                        [3] => 
                        [4] => 
                        [5] => 
                        [6] => 
                        [7] => 
                    )
    
            )
    
        [11] => Array
            (
                [0] => Array
                    (
                        [1] => 
                        [2] => 1
                        [3] => 2
                        [4] => 3
                        [5] => 4
                        [6] => 5
                        [7] => 6
                    )
    
                [1] => Array
                    (
                        [1] => 7
                        [2] => 8
                        [3] => 9
                        [4] => 10
                        [5] => 11
                        [6] => 12
                        [7] => 13
                    )
    
                [2] => Array
                    (
                        [1] => 14
                        [2] => 15
                        [3] => 16
                        [4] => 17
                        [5] => 18
                        [6] => 19
                        [7] => 20
                    )
    
                [3] => Array
                    (
                        [1] => 21
                        [2] => 22
                        [3] => 23
                        [4] => 24
                        [5] => 25
                        [6] => 26
                        [7] => 27
                    )
    
                [4] => Array
                    (
                        [1] => 28
                        [2] => 29
                        [3] => 30
                        [4] => 
                        [5] => 
                        [6] => 
                        [7] => 
                    )
    
            )
    
        [12] => Array
            (
                [0] => Array
                    (
                        [1] => 
                        [2] => 
                        [3] => 
                        [4] => 1
                        [5] => 2
                        [6] => 3
                        [7] => 4
                    )
    
                [1] => Array
                    (
                        [1] => 5
                        [2] => 6
                        [3] => 7
                        [4] => 8
                        [5] => 9
                        [6] => 10
                        [7] => 11
                    )
    
                [2] => Array
                    (
                        [1] => 12
                        [2] => 13
                        [3] => 14
                        [4] => 15
                        [5] => 16
                        [6] => 17
                        [7] => 18
                    )
    
                [3] => Array
                    (
                        [1] => 19
                        [2] => 20
                        [3] => 21
                        [4] => 22
                        [5] => 23
                        [6] => 24
                        [7] => 25
                    )
    
                [4] => Array
                    (
                        [1] => 26
                        [2] => 27
                        [3] => 28
                        [4] => 29
                        [5] => 30
                        [6] => 31
                        [7] => 
                    )
    
            )
    
    )
    

    So, now it's easy to create month table for every month you need using something like this

      function month2table($month, $calendar_array) {
        $ca = 'align="center"';
        $res = "";
        foreach ($calendar_array[$month] as $month=>$week) {
          $res .= '';
          foreach ($week as $day) {
            $res .= '';
            }
          $res .= '';
          }
        $res .= '
    MoTuWeThFrSaSu
    ' . ($day ? $day : ' ') . '
    '; return $res; }

    Use these functions like

      $calarr = year2array(2011);
      echo month2table(1, $calarr); // January
      echo month2table(2, $calarr); // February
      ...
      echo month2table(12, $calarr); // December
    

    ..or put months in for loop.

    So... e.g. for January 2011 in your browser you'll see this

    enter image description here

    Hope this helps.

提交回复
热议问题