Calendario con 28 giorni anche per i mesi successivi

mediasteno

Utente Attivo
25 Gen 2010
120
0
0
Ho trovato su internet questo script php che mi permette di stampare un calendario:
PHP:
<div id="calendar_wrap">
			<?php
			//Sat_
			//calendario perpetuo, non serve altro che chiamare la funzione con calendario($mese,$anno)
			//open source, fanne un po' che ti pare.


			function calendario($mese,$anno){
			Global $_GET;

			if ($_GET['x'] == NULL){
			$mese_ = $mese;
			$anno_ = $anno;
			}
			else{
			$mese_ = (int)strftime( "%m" ,(int)$_GET['x']);
			$anno_ = (int)strftime( "%Y" ,(int)$_GET['x']);
			}

			$prev = mktime(0, 0, 0, $mese_ -1, 1,  $anno_);
			$next = mktime(0, 0, 0, $mese_ +1, 1,  $anno_);

			$human_month = array("error", "Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre" ); 


			$settimana   = array("Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Dom"); 
			$colonne     = 7;
			$giorni      = date("t",mktime(0, 0, 0, $mese, 1, $anno));  //giorni del mese in questione
			$primo_lunedi= date("w",mktime(0, 0, 0, $mese, 1, $anno));  //Array_parte da 0

			if($primo_lunedi==0){
			$primo_lunedi = 7;  //siamo mica americani
			}

			print("<table>"); //table
			print("\n\t<tr height=\"20\" class=\"txtday\">\n\t\t<td colspan=\"".$colonne."\" align=\"center\">");
			print("<a href=\"?x=".$prev."\">&lt;&lt;</a> <span class=\"txtma\">".$human_month[(int)$mese_]." ".$anno_."</span> 
				   <a href=\"?x=".$next."\">&gt;&gt;</a></td>\n\t</tr>"); //mese/anno

			foreach($settimana as $val){
			print("\n\t\t<td height=\"20\" class=\"txtma\">".$val."\t</td>");  //stampa i giorni della settimana
			}
			print("</tr>");

			for($i = 1; $i<$giorni+$primo_lunedi; $i++){				//stampa i giorni 

			if($i%$colonne+1==0){

			print("\n\t<tr>");
			}
			if($i<$primo_lunedi){

			print("\n\t\t<td>&nbsp;</td>");

			}
			else{

			$giorno_= $i-($primo_lunedi-1);												//verifico se la data di oggi
			$data = strtotime(date($anno_."-".$mese_."-".$giorno_));
			$oggi = strtotime(date("Y-m-d"));

			/* vedo nel file testuale appuntamenti.txt le date degli appuntamenti */
			$eventi = fopen("appuntamenti.txt","r");
			while ($rigafile = fgets($eventi,1024)) {
			$campiriga = explode("|",$rigafile);		
			$d = strtotime(date("$campiriga[1]"));     /*ricavo le date appuntamenti*/
			$evento = "$campiriga[2]";
			
			if ($data == $d){
			$giorno_ = "<a href='#' class='tooltip' title='$evento'>$giorno_ </a>";      //evidenzio i giorni con appuntamenti in un tooltip
								}
													}
			
			if ($data != $oggi){
			print("\n\t\t<td class=\"txtday\">".$giorno_."</td>");
			}
			else{
			print("\n\t\t<td><span class=\"txtoggi\">".$giorno_."</span></td>");    //stampa in rosso la data odierna
			}
					}
			if($i%$colonne==0){
			print("\n\t</tr>");
			}
			}                                                                                                       
			print("\n\t<tr height=\"30\">&nbsp;\n\t</tr>");
			print("\n</table>");
			}
			calendario(date("m"),date("Y"));							//stampa del calendario
			?>

</div>

Ora ho notato che stampa 28 giorni per ogni mese. Essendo febbraio di 28 ho pensato che probabilmente fa riferimento al mese attuale, non ricordo se a gennaio mi dava 31 giorni.
Dato che utilizzo il calendario per evidenziare una serie di appuntamenti, vorrei che il calendario, quando vado avanti con i mesi, mi stampi il numero esatto di giorni in base al mese, come devo modificare il codice per ottenere questo?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao
Aggiungi l'underscore alla variabile $mese qui
PHP:
$giorni = date("t", mktime(0, 0, 0, $mese_, 1, $anno));  //giorni del mese in questione
$primo_lunedi = date("w", mktime(0, 0, 0, $mese_, 1, $anno));  //Array_parte da 0
alla fine quello che usa lo script è $mese_ non $mese che gli arriva solo come parametro e lo usa se non è settato il GET
EDIT
posta un esempio di appuntamenti.txt protrebbe servire ad altri :fonzie:
 
Ultima modifica:

mediasteno

Utente Attivo
25 Gen 2010
120
0
0
Risolto. Posto tutto lo script, nel caso serve a qualcuno. E' un calendario che presenta evidenziati i giorni, nei quali sono previsti degli eventi.
il codice html è:
PHP:
<div id="calendar_wrap">
			<?php
			//Sat_
			//calendario perpetuo, non serve altro che chiamare la funzione con calendario($mese,$anno)
			//open source, fanne un po' che ti pare.


			function calendario($mese,$anno){
			Global $_GET;

			if ($_GET['x'] == NULL){
			$mese_ = $mese;
			$anno_ = $anno;
			}
			else{
			$mese_ = (int)strftime( "%m" ,(int)$_GET['x']);
			$anno_ = (int)strftime( "%Y" ,(int)$_GET['x']);
			}

			$prev = mktime(0, 0, 0, $mese_ -1, 1,  $anno_);
			$next = mktime(0, 0, 0, $mese_ +1, 1,  $anno_);

			$human_month = array("error", "Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre" ); 


			$settimana   = array("Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Dom"); 
			$colonne     = 7;
			$giorni      = date("t",mktime(0, 0, 0, $mese_, 1, $anno));  //giorni del mese in questione
			$primo_lunedi= date("w",mktime(0, 0, 0, $mese_, 1, $anno));  //Array_parte da 0

			if($primo_lunedi==0){
			$primo_lunedi = 7;  //siamo mica americani
			}

			print("<table>"); //table
			print("\n\t<tr height=\"20\" class=\"txtday\">\n\t\t<td colspan=\"".$colonne."\" align=\"center\">");
			print("<a href=\"?x=".$prev."\">&lt;&lt;</a> <span class=\"txtma\">".$human_month[(int)$mese_]." ".$anno_."</span> 
				   <a href=\"?x=".$next."\">&gt;&gt;</a></td>\n\t</tr>"); //mese/anno

			foreach($settimana as $val){
			print("\n\t\t<td height=\"20\" class=\"txtma\">".$val."\t</td>");  //stampa i giorni della settimana
			}
			print("</tr>");

			for($i = 1; $i<$giorni+$primo_lunedi; $i++){				//stampa i giorni 

			if($i%$colonne+1==0){

			print("\n\t<tr>");
			}
			if($i<$primo_lunedi){

			print("\n\t\t<td>&nbsp;</td>");

			}
			else{

			$giorno_= $i-($primo_lunedi-1);												//verifico se la data di oggi
			$data = strtotime(date($anno_."-".$mese_."-".$giorno_));
			$oggi = strtotime(date("Y-m-d"));

			/* vedo nel file testuale appuntamenti.txt le date degli appuntamenti */
			$eventi = fopen("appuntamenti.txt","r");
			while ($rigafile = fgets($eventi,1024)) {
			$campiriga = explode("|",$rigafile);		
			$d = strtotime(date("$campiriga[1]"));     /*ricavo le date appuntamenti*/
			$evento = "$campiriga[2]";
			
			if ($data == $d){
			$giorno_ = "<a href='#' class='tooltip' title='$evento'>$giorno_ </a>";      //evidenzio i giorni con appuntamenti in un tooltip
								}
													}
			
			if ($data != $oggi){
			print("\n\t\t<td class=\"txtday\">".$giorno_."</td>");
			}
			else{
			print("\n\t\t<td><span class=\"txtoggi\">".$giorno_."</span></td>");    //stampa in rosso la data odierna
			}
					}
			if($i%$colonne==0){
			print("\n\t</tr>");
			}
			}                                                                                                       
			print("\n\t<tr height=\"30\">&nbsp;\n\t</tr>");
			print("\n</table>");
			}
			calendario(date("m"),date("Y"));							//stampa del calendario
			?>


<script type="text/javascript">
function createTooltip() {

	if (!$('.tooltip').length) {

		return;
	}

	$('body').append('<div id="tooltip"><div id="tooltip_inner"></div></div>');

	var $tt_title, $tt_alt;

	var $tt = $('#tooltip');
	var $tt_i = $('#tooltip_inner');

	$('.tooltip').hover(function() {


		if ($(this).attr('title')) {
			$tt_title = $(this).attr('title');
			$(this).attr('title', '');
		}

		if ($(this).attr('alt')) {
			$tt_alt = $(this).attr('alt');
			$(this).attr('alt', '');
		}

		$tt_i.html($tt_title);

		$tt.show();
	},
	function() {

		$tt.hide();

		$tt_i.html('');

		if ($tt_title) {
			$(this).attr('title', $tt_title);
		}

		if ($tt_alt) {
			$(this).attr('alt', $tt_alt);
		}

	}).mousemove(function(ev) {

		var $ev_x = ev.pageX;
		var $ev_y = ev.pageY;

		var $tt_x = $tt.outerWidth();
		var $tt_y = $tt.outerHeight();

		var $bd_x = $('body').outerWidth();
		var $bd_y = $('body').outerHeight();

		$tt.css({
			'top': $ev_y + $tt_y > $bd_y ? $ev_y - $tt_y : $ev_y,
			'left': $ev_x + $tt_x + 20 > $bd_x ? $ev_x - $tt_x - 10 : $ev_x + 15
		});
	});
}

$(function() {
	createTooltip();
});

</script>

Il file testuale appuntamenti.txt presenta l'elenco degli eventi:

Codice:
1|2013-2-8|evento01|citta01|
2|2013-2-15|evento02|citta02|
3|2013-2-22|evento03|citta03|
4|2013-3-31|evento04|citta04|
5|2013-4-7|evento05||

che viene letto dal codice precedente e ricava la data per poi evidenziarla nel calendario.
Ho anche inserito un plugin jquery tooltip che consente di visualizzare l'evento passando sopra il giorno con il mouse. Per farlo funzionare bisogna inserire nel head il richiamo alla libreria jquery

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>

Il tutto fa riferimento al seguente foglio di stile per la formattazione:

HTML:
/* Calendar */
#calendar_wrap {text-align : center; } 
#calendar_wrap table tr td {width : 240px; border: 1px solid #000033;}

#calendar_wrap .txtday , .txtday a {text-align : center; color: #000066;}
#calendar_wrap .txtma , .txtma a{font-weight : bold; text-align : center; color: #000033; }
#calendar_wrap .txtoggi {color: red;}

.eventi a {font-size:11px; color: #000033;}

/* stile tooltip */

.tooltip {cursor: default;}

a.tooltip {cursor: pointer; background-color:#ff0000; color: white;}

#tooltip,
#tooltip_inner {border: 1px solid; border-radius: 5px;}
#tooltip {background: #fff; border-color: #666; display: none; font-size: 14px; padding: 1px; position: absolute; left: -9999px;
	width: 250px; z-index: 9999;}

#tooltip_inner {background: #f9f9f9; border-color: #ccc; padding: 10px;}


Spero di essere stata chiara. :byebye:
 
Discussioni simili
Autore Titolo Forum Risposte Data
K [PHP] Creazione di Calendario con orario PHP 4
V Servizio email con calendario condiviso Posta Elettronica 1
T PHP sync con gmail, rubrica google e calendario google PHP 0
T Problema con calendario PHP 17
T Calendario in PHP (con file di testo) PHP 4
M Calendario con java Javascript 0
sgeuna@caffarel Una calendario-agenda con PHP e MySQL PHP 6
M [PHP] calendario con eventi problema con date PHP 9
G Calendario con eventi PHP 7
I Calendario con eventi PHP 4
A Calendario eventi con database Classic ASP 2
M Plugin Calendario Appuntamenti WordPress 1
E Calendario appuntamenti \dipendenti PHP 0
F Calendario php? PHP 3
L [PHP] calendario PHP 0
R [WordPress] Calendario Personale per ogni Utente WordPress 0
maxnegri [javascript] calendario booking disponibilità Javascript 2
L [PHP] calendario: dati da DB in tabella PHP 1
Q Notice: Undefined index: codice in C:\xampp\htdocs\STAGE\calendario\modifica.php on line 10 PHP 8
A [Javascript] Datepicker - il calendario non si apre Javascript 16
Rhisen [PHP] Problema Calendario Eventi PHP 0
E [Javascript] Assegnazione variabile da campo input di tipo "a calendario" Javascript 3
Gaetano1991h Passaggio da calendario php a javascript PHP 2
L Zimbra calendario Vs PHP PHP 0
G calendario collegato a database Classic ASP 2
felino [Wordpress] Ordine per Calendario Personalizzato WordPress 1
V Reperire le date della settimana del calendario jQuery 1
D Creare Calendario PHP PHP 0
A Pubblicazione dati su calendario settimanale jQuery 28
M Otttimizazione date calendario prenotazioni PHP 0
F Problema attivare/disattivare immagine calendario datepicker da select jQuery 1
M Calendario giornate campionato PHP 4
felino [PHP][iCal] iCal: sincronizzazione e visualizzazione calendario PHP 2
L calendario e click <a href=' PHP 9
G Aggiornamento Calendario MS Access 3
felino Contact Form 7: calendario e formattazione messaggio WordPress 0
novello88 [EXCEL] Calendario precompilato Windows e Software 1
B Turno in quinta su calendario PHP 3
ivarello Calendario e tabelle PHP 2
A modifica al calendario Javascript 0
Monital [RISOLTO]creare un calendario stile campionato di calcio PHP 8
T calendario connesso a dati variabili Javascript 2
D Cambio funzioni mouse in calendario Javascript Javascript 1
A errore javascript calendario scolastico Javascript 3
B Inserimento risultati di un calendario calcistico tramite un solo bottone PHP 2
P Calendario e problema inserimenti PHP 0
Eruyomon Calendario Dinamico PHP 37
A PHP calendario, come inserire i giorni precedenti? PHP 1
M inserire un calendario settimanale su una pagina html, aggiornabile dall'esterno. HTML e CSS 11
criric Semplice calendario Snippet PHP 0

Discussioni simili