• Super User

    @Giorgiotave said:

    Pater, davvero un ottimo lavoro, grande 🙂

    Quando clicco su una data da un 404 cosa vorresti fare in realta?
    Ah scusate, li dovevo levare... praticamente lo utilizzavo per leggere le nius 😄 Calcolavo anche il TIMESTAMP e leggevo dal DB... E' una delle tante idee che si posso applicare 😄


  • User Attivo

    Utilissimo.

    Grazie mille


  • User Attivo

    non ho fatto in tempo a leggere tutto (spero di non ripetere qualcosa di già detto)

    TIPS per sapere il numero dei giorni di un mese in automatico (febbr. e bisest. compresi)

    • si stabilisce la data del primo giorno del mese successivo
    • si togli un giorno (così siamo all'ultimo giorno del mese in questione)
    • si prende la parte numerica del giorno

    così abbiamo il numero di giorni del mese in questione

    :ciauz:


  • Super User

    @riky78 said:

    non ho fatto in tempo a leggere tutto (spero di non ripetere qualcosa di già detto)

    TIPS per sapere il numero dei giorni di un mese in automatico (febbr. e bisest. compresi)

    • si stabilisce la data del primo giorno del mese successivo
    • si togli un giorno (così siamo all'ultimo giorno del mese in questione)
    • si prende la parte numerica del giorno

    così abbiamo il numero di giorni del mese in questione

    :ciauz:ce lo puoi fare un esempio? non sto capendo molto...


  • User Attivo

    hai ragione.....

    
    $data_inizio="2005-3-5"; //data del mese di cui si vogliono conoscere i giorni
    $data_tmp=date("Y-m",strtotime($data_inizio))."-1";	//inizio mese
    $data_tmp=strtotime("+1 month",strtotime($data_tmp)); //mese prossimo
    $data_fine=date("Y-m-d",strtotime("-1 day",$data_tmp));
    $giorni=date("d",strtotime($data_fine));
    echo $giorni;
    
    

    preciso:

    è un modo sicuro x sapere i giorni del mese ed esula dalla pilloa in se


  • Super User

    @riky78 said:

    hai ragione.....

    
    $data_inizio="2005-3-5"; //data del mese di cui si vogliono conoscere i giorni
    $data_tmp=date("Y-m",strtotime($data_inizio))."-1";	//inizio mese
    $data_tmp=strtotime("+1 month",strtotime($data_tmp)); //mese prossimo
    $data_fine=date("Y-m-d",strtotime("-1 day",$data_tmp));
    $giorni=date("d",strtotime($data_fine));
    echo $giorni;
    
    

    preciso:

    è un modo sicuro x sapere i giorni del mese ed esula dalla pilloa in seottimo, lo testerò appena possibile 😄


  • User Newbie

    ciao bell script lo usato ma non so il motivo mi mancano 2 giorni dell mese
    se vi interessa la modifica x unirlo ad un db e segnalare vari appuntamenti vi posto il codice.


  • Super User

    Ciao darkrunik e benvenuto nel Forum GT ;),
    ho tolto io il link che avevi postato,se vuoi segnalare il tuo sito puoi farlo nell'apposita area del forum "Segnala il tuo sito",questa è una sezione più tecnica 🙂
    Se vuoi postare la tua modifica,ben venga,saresti d'aiuto a tutti gli utenti interessati 🙂 😉
    Ciao!


  • User Attivo

    Ho visto che lo script è vecchiotto...cmq volevo segnalare un metodo alternativo per fare un calendario... che sembra più semplice..

    Ho dovuto estrapolarlo dal suo contesto e metterlo in una pagina per farvelo vedere, è spiegato sommariamente durante il codice...

    [PHP]<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    Mese:
    <select name="mese">
    <?php
    $mese = array(1 => 'Gen','Feb','Mar','Apr','Mag','Giu','Lug','Ago','Set','Ott','Nov','Dic');

    		for($a=1; $a<=12; $a++)
    		{
    			echo "<option value='$a'>$mese[$a]</option>\n";
    		}
    	?>
    </select>
    <br/>
    <input type="text" size="4" maxlength="4" name="anno"><br>
    
    <input type="submit" value="Vai"/>
    

    </form>

    <?php
    $month = $_POST['mese'];
    $year = $_POST['anno'];
    echo $mese[$month] . "/" . $year;

    $first = mktime(0,0,0,$month ,1,$year);// time stamp del primo giorno del mese
    $total_days = date("t", $first);// giorni totali del mese
    $first_day_week = date("w",$first);// numero del giorno della settimana (0=domenica,1=lunedì ecc)
    if($first_day_week == 0) $first_day_week = 7;// domenica è 0 quindi lo trasformo in 7
    ?>
    <table style="font:inherit; font-size:10px; color: #666666" width="210" cellspacing="0">
    <tr style="font-weight:bold; text-align:center; color:#000000">
    <td style="background:#FFF3C4">Lu</td>
    <td style="background:#FFEC9F">Ma</td>
    <td style="background:#FFE784">Me</td>
    <td style="background:#FFE16A">Gi</td>
    <td style="background:#FFCC00">Ve</td>
    <td style="background:#FF9900">Sa</td>
    <td style="background:#FF6600">Do</td>
    </tr>
    <tr>
    <?php
    $a = 1;// quando $a sarà divisibile per 7 chiude la riga di tabella e va a capo

    $b = 1;// per cambiare lo sfondo alla cella del giorno della settimana ( ci si può sbizzarrire)

    $day = 1;

    while($day <= $total_days)
    {
    echo "\t\t<td style="text-align:center;";
    if($b == 1)
    {
    echo "background:#FFF3C4">";
    }
    elseif($b == 2)
    {
    echo "background:#FFEC9F">";
    }
    elseif($b == 3)
    {
    echo "background:#FFE784">";
    }
    elseif($b == 4)
    {
    echo "background:#FFE16A">";
    }
    elseif($b == 5)
    {
    echo "background:#FFCC00">";
    }
    elseif($b == 6)
    {
    echo "background:#FF9900">";
    }
    elseif($b == 7)
    {
    echo "background:#FF6600">";
    $b = 0;
    }

    $b++;
    
    if($a < $first_day_week)
    {
    	echo "&nbsp;";
    }
    else
    {
    	if($em->day[$day] === true)
    	{
    

    // Questa è una classe per scrivere un link se l'evento esiste (preso dal db)
    }
    else
    {
    echo $day;
    }
    $day++;
    }
    echo "</td>\n";

    if(is_integer($a / 7)) echo "\t</tr><tr>\n";
    $a++;
    

    }

    ?>
    </tr>
    </table>[/PHP]

    Lo script è pubblicato, quindi non copiate, è reato.:nonono: Grazie

    Ho messo un esempio su
    http://directory.zenia.it/misc/calendar.php

    moderatore sii clemente per il link, non c'è nient'altro che il calendario nella pagina...

    C'è un form per scegliere mese e anno!

    Buon divertimento


  • Super User

    Grazie Francesco Zeno per aver postato la tua soluzione 🙂
    Per il link,figurati,hai fatto bene a postare una demo 🙂
    L'importante è che non spammi il tuo sito,poi tutto è permesso 😉

    @francesco zeno said:

    Lo script è pubblicato, quindi non copiate, è reato.:nonono: Grazie

    Se non è protetto da copyright non è illegale copiarlo.
    Comunque,un consiglio...potresti proteggerlo gratuitamente con una licenza creative commons oppure far inserire un link al tuo sito all'interno dello script...
    in questo modo aumenteresti le visite al tuo sito e alzeresti il tuo pagerank 😉


  • User Attivo

    Hai ragione, provvedo subito...

    Comunque legalmente è mia semplicemente perché l'ho scritta io....rivendicarne la paternità ovviamente è un po' difficile senza riservare i diritti....

    Ho visto che è un po' complesso ottenere una lincenza creative commons, perchè in italia siamo sempre indietro


  • User Attivo

    se posti un codice vuol dire che lo rendi publlico.

    visto che è una pillola(per aiutare la community) se dai il tuo contributo il tuo codice puo essere utilizzato.
    il mio parere...


  • User Attivo

    @Skyline said:

    se posti un codice vuol dire che lo rendi publlico.

    visto che è una pillola(per aiutare la community) se dai il tuo contributo il tuo codice puo essere utilizzato.
    il mio parere...
    Hai perfettamente ragione!!!

    Mi sono espresso male, intendevo che non si può vendere, modificare ed appropriarsi della paternità...

    Si può copiare e ripubblicare...

    Ciao!!


  • User Attivo

    tornando al calendario di Pater.....
    non si può cambiare mese? cioè come implemento delle freccette per andare aventi e/o indietro nei mesi?


  • User Attivo

    up


  • User Attivo

    @talkoman said:

    tornando al calendario di Pater.....
    non si può cambiare mese? cioè come implemento delle freccette per andare aventi e/o indietro nei mesi?

    nessun aiuto?


  • Consiglio Direttivo

    Ciao talkoman,
    immagino tu debba lavorare su questo pezzo di codice:
    [php]$dati['mese_num'] = date("n", time()); // Mese corrente ( numerico )
    $dati['mese_text'] = date("F", time()); // Mese Corrente ( testuale )
    $dati['oggi'] = date("j", time()); // Oggi ( numerico senza eventuali zeri )
    $dati['oggi_sett'] = date("w", time()); // Oggi ( nella settimana, numerico )
    $dati['anno'] = date("Y", time()); // Anno
    [/php]
    Ovvero: assegnare alle freccette il valore del mese precedente/successivo e quindi far eseguire il codice di cui sopra modificato, che prenda il valore del mese interessato e quindi da sostituire a time().
    Per far decidere allo script quale dei due pezzi di codice eseguire basta fare un if.
    :ciauz:


  • User Attivo

    Salve a tutti. Io ho copiato il codice all'interno di una pagina, ma quando la vado ad eseguire non vine visualizzato nulla. Perché?


  • User

    @PaTeR said:

    PRATICA

    Scommetto che questa è la parte che vi piace di più :D, ma non scordatevi che PRIMA DELLA PRATICA, ci deve essere una TEORIA PERFETTA ( o quasi 😄 ).

    Ecco qui cosa il mio genio malefico è riuscito a confabulare ( Naturalmente tutto commentato per spiegarvi il funzionamento 😞

    >
        //Trovo i dati fondamentali:
        $dati['giorni_mesi'] = array(31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); // Array con i giorni dei mesi
        $dati['mese_num'] = date("n", time()); // Mese corrente ( numerico )
        $dati['mese_text'] = date("F", time()); // Mese Corrente ( testuale )
        $dati['oggi'] = date("j", time()); // Oggi ( numerico senza eventuali zeri )
        $dati['oggi_sett'] = date("w", time()); // Oggi ( nella settimana, numerico )
        $dati['anno'] = date("Y", time()); // Anno
        $dati['start'] = date("w", mktime(0,0,0, $dati['mese_num'], 1, $dati['anno'])); // Giorno della settimana del primo giorno dell'anno
        $dati['giorni_mesi'][1] = (($dati['mese_num']%400) == 0) ? 29 : 28; // Calcolo dei giorni di febbraio
        $dati['giorni_mese'] = $dati['giorni_mesi'][$dati['mese_num']-1]; // Giorni del mese corrente
        $dati['settimane_mese'] = ceil($dati['giorni_mese']/7); // Settimane del mese corrente arrotondato per eccesso.
        
        //
        // Vi sarete accorti che:
        // 1) Nel calcolo dei giorni del mese corrente c'è un -1: Questo è perchè l'array inizia da 0, non da 1
        // 2) Ho arrotondato per eccesso il calcolo delle settimane: Per evitare giorni nascosti nell'ultima settimana
        // 3) I giorni della settimana trovati da date() iniziano da 0 ( Domenica ) fino a 6 ( Sabato )
        //
        
        $info['can_start'] = FALSE; // Se il conteggio reale dei giorni può partire
        $info['to_less'] = 0; // Giorni da accumulare
    
        $text = '<div align="center">**'.$dati['mese_text'].'**</div>'.
        '<table align="center">
            <tr>
                <td class="cal_days">LU</td>
                <td class="cal_days">MA</td>
                <td class="cal_days">ME</td>
                <td class="cal_days">GI</td>
                <td class="cal_days">VE</td>
                <td class="cal_days">SA</td>
                <td class="cal_days">DO</td>
            </tr>'; // Schema fisso dei giorni della settimana
    
        //
        // Ciclo madre: Continua per tutte le settimane del mese
        //
    
        for($ciclo = 0; $ciclo <= $dati['settimane_mese']; $ciclo++)
        {
            $text .= '<tr>'; // Aggiungo una griglia
    
            //
            // Ciclo Figlio ( SubCiclo ): Avanza per tutti i giorni della settimana
            //
            
            for($subciclo = 1; $subciclo <= 7; $subciclo++)
            {
                //
                // Controllo se il ciclo può partire e se il giorno del ciclo figlio
                // corrisponde a quello della settimana del primo giorno del mese
                //
    
                if($subciclo != $dati['start'] && $info['can_start'] == FALSE)
                {
                    //
                    // Se tutti e due sono FALSE:
                    //
    
                    $text .= '<td class="cal_day"></td>'; // 1) Aggiungo una casella vuota
                    $info['to_less']++; // 2) Aggiungo un giorno da levare
    
                    continue; // 3) Faccio ricominciare il ciclo finchè uno dei due casi si riveli TRUE
                }
                else
                {
                    $info['can_start'] = TRUE; // Muto il valore di can_start in TRUE
                }
                
                //
                // Naturalmente solo uno dei due casi può rivelarsi TRUE: Solo ' $subciclo != $dati['start'] '
                // dato che can_start diverrà TRUE solo quando si avvererà la prima condizione. Così il conto può partire
                //
                // Ora mi calcolo il giorno corrente, Sommando il valore corrente della variabile di questo ciclo ai giorni
                // delle settimane trascorse ( Grazie alla moltiplizacione per 7 di $ciclo ) e levando infine i giorni
                // accumulati in precedenza. Vi ricordo che questo di seguito è la variabile contenente il giorno da mostrare,
                // non quello di oggi
    
                $dati['current_day'] = $subciclo+($ciclo*7)-$info['to_less']; // Calcolo il giorno da mostrare
                
                //
                // Controllo ci restano ancora giorni del mese
                //
    
                if($dati['current_day'] <= $dati['giorni_mese'])
                {
    
                    //
                    // Se si...
                    //
                    // Vorrete fare capire il giorno di oggi, no? Quindi cambiamo stile
                    // alla cella in caso questa corrisponda a quella di oggi.
                    //
    
                    if($dati['current_day'] == $dati['oggi']) // Controllo se il giorno da mostrare è quello di oggi
                    {
                        $tdclass = 'oggi'; // Cambio stile in 'oggi' se è oggi
                    } else {
                        $tdclass = 'default'; // Cambio stile in 'Default' se non è oggi
                    }
    
                    $text .= '<td class="'.$tdclass.'">'.$dati['current_day'].'</td>'; // Poi aggiungo la cella
                } else {
                    //
                    // Se invece non ci restano più giorni del mese, faccio terminare il ciclo
                    //
    
                    break;
                }
                
                //
                // Finisce qui il SubCiclo, se ci sono ancora settimane da mostrare il ciclo continuerà, se no, si fermerà.
                //
            }
    
            $text .= '</tr>'; // Chiudo la griglia
        }
    
        $text .= '</table>'; // Chiudo la tabella
    
    >```Beati voi che state leggendo questo script perchè non dovrete sbattere la testa su ogni muro come ho fatto io! :D
    
    Spero vi sia utile! :D  :ciauz:  :ciauz:  :ciauz:
    
    buon codice, utilissimo. Però ho scoperto un bug. I mesi che iniziano di domenica non si vedono (gennaio 2012, maggio 2011, agosto 2010).
    
    qualche idea su come risolvere questo bug?

  • Super User

    Scusate la mia lunga assenza. Purtroppo ora non ho molto tempo, vi prometto che a breve penserò ad aggiornare questo vecchio codice con uno nuovo, magari in Ajax, e penserò a correggere i bug.

    Spero di non dovervi fare aspettare tanto, vi prego però di essere pazienti comunque! ( Periodo di esami.. 😄 )