disign.it | PHP: calendario a partire dalla data corrente | a digital sign for a best design!
A digital sign for a best design
Programmazione 2.898 visualizzazioni

PHP: calendario a partire dalla data corrente

03/06/2013

Sfruttando le funzioni di php sulla gestione delle date risulta facile costruire un piccolo calendario utile sia come widget sia come elemento di base attaverso cui poter sviluppare un piccolo motore di ricerca interno al sito che permetta la selezione di eventi o post sulla base della data.

Lo script originale è stato prodotto da Jason Marchalonis, io sono intervenuto per renderlo compatibile con il formato italiano delle date.

Definita la funzione, come vedremo dopo, possiamo chiamare la funzione stessa per avere l'output del mese corrente o, con una chiamata leggermente più articolata, l'output del calendario di tutto l'anno in corso.

 

La parte CSS di formattazione, a titolo puramente indicativo è questa:

.calendar {
    border: 1px solid black;
    color: #666;
    font-size: 12px;
    margin: 30px auto;   
}

td,th {
    color: #777;
    font-family: Trebuchet MS, Arial,  sans-serif;
    font-size: 14px;
    background:#FFC;
    padding: 6px;
}

.header {
    color: #900;
}

.day_on {
    color: green;
    background-color: #CCC;
}

 

Lo script (comprensivo dei commenti esplicativi originali dell'autore) è il seguente:

 

function build_calendar($month,$year,$dateArray) {

$today_date = date("d");
$today_date = ltrim($today_date, '0');

     // Create array containing abbreviations of days of week (in italiano)
     $daysOfWeek = array('L','M','M','G','V','S','D');

     // What is the first day of the month in question?
     $firstDayOfMonth = mktime(0,0,0,$month,1,$year);

     // How many days does this month contain?
     $numberDays = date('t',$firstDayOfMonth);

     // Retrieve some information about the first day of the
     // month in question.
     $dateComponents = getdate($firstDayOfMonth);

     // What is the name of the month in question?
     $monthName = $dateComponents['month'];
     
     // Nomi dei mesi in italiano
     $sost = array("Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre");
     $cerc = array("January","February","March","April","May","June","July","August","September","October","November","December");
     $monthName = str_replace($cerc, $sost, $monthName);

     // What is the index value (0-6) of the first day of the
     // month in question.
     
     $dayOfWeek = $dateComponents['wday'];
     
     // variazione per far partire la settimana da lunedì
     
     $dayOfWeek = ($dayOfWeek + 6) % 7;

     // Create the table tag opener and day headers

     $calendar = "<table class='calendar'>";
     $calendar .= "<caption>$monthName $year</caption>";
     $calendar .= "<tr>";

     // Create the calendar headers

     foreach($daysOfWeek as $day) {
          $calendar .= "<th class='header'>$day</th>";
     }

     // Create the rest of the calendar

     // Initiate the day counter, starting with the 1st.

     $currentDay = 1;

     $calendar .= "</tr><tr>";

     // The variable $dayOfWeek is used to
     // ensure that the calendar
     // display consists of exactly 7 columns.

     if ($dayOfWeek > 0) {
          $calendar .= "<td colspan='$dayOfWeek'>&nbsp;</td>";
     }
    
     $month = str_pad($month, 2, "0", STR_PAD_LEFT);
 
 while ($currentDay <= $numberDays) {

          // Seventh column (Saturday) reached. Start a new row.

          if ($dayOfWeek == 7) {

               $dayOfWeek = 0;
               $calendar .= "</tr><tr>";

          }

          $currentDayRel = str_pad($currentDay, 2, "0", STR_PAD_LEFT);

          $date = "$year-$month-$currentDayRel";
         
      if($currentDayRel == $today_date && date("m") == $month){  $calendar .= "<td class='day_on' id='today_date' rel='$date'>$currentDay</td>"; }

          else { $calendar .= "<td class='day' rel='$date'>$currentDay</td>"; }

          // Increment counters

          $currentDay++;
          $dayOfWeek++;

     }    
    

     // Complete the row of the last week in month, if necessary

     if ($dayOfWeek != 7) {
    
          $remainingDays = 7 - $dayOfWeek;
          $calendar .= "<td colspan='$remainingDays'>&nbsp;</td>";

     }
    
     $calendar .= "</tr>";

     $calendar .= "</table>";

     return $calendar;

}


     $dateComponents = getdate();

     $month = $dateComponents['mon'];                 
     $year = $dateComponents['year'];

 

*********************

 

Per avere l'output del mese corrente:

echo build_calendar($month, $year, $dateArray);

 

Per avere l'output dell'intero anno corrente:

$year = "2013";
$i = 1;
$month = 1;  //Numeric Value
while($i <= 12) {
echo build_calendar($month, $year, $dateArray);
$month = $month+1;
$i++; }

 

← Feed RSS: generare un feed in PHP PHP: estrarre indirizzi email da un sito →

Invia una domanda o un commento sull'articolo

I campi obbligatori sono segnalati *

*

*



 

© 2009 - 2017 Impronte digitali di Luca Frassineti. Tutti i diritti riservati.