Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Calendario in php

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    70

    Calendario in php

    Salve ho trovato un semplice calendario che si generava in php, e mi sono messo a smanettare per vedere di inserirci anche delle freccette per andare avanti o indietro nei mesi, e la cosa pareva andare bene fino a che, andando avanti con le freccette mi sono reso conto che non mi veniva visualizzato novembre e non riesco a capire per quale barbaro motivo non voglia uscire
    non fate caso ai numeri che appaiono quando provata a farlo funzionare perche erano una prova..............spero che mi possiate aiutare a capire questa cosa strana
    Codice PHP:
    //Trovo i dati fondamentali:     
    $dati['giorni_mesi'] =  array(31031303130313130313031); // Array con i giorni dei mesi     
    $dati['mese_num'] = date("n",  time()); // Mese corrente ( numerico )     
    if ($st==){     $p=$_GET['p'];     $p++;     $dati['mese_num']=$dati['mese_num']+$p;     $m=$dati['mese_num'];     } elseif ($st==2){     $p=$_GET['p'];             if ($p==0){echo "NO";}             else{             $p--;             $m=$_GET['m'];             $dati['mese_num']=$m-1;             $m=$dati['mese_num'];     }}     else{     $p=0;     }          
    $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.               echo "$p "; echo $dati['mese_num'];           $info['can_start'] = FALSE; // Se il conteggio reale dei giorni può partire     $info['to_less'] = 0; // Giorni da accumulare      $text = '<div  align="center" class="lista">     <tr>     <td> <form action="calendarioprenotazioni.php?st=2&m='.$m.'&p='.$p.'" method="post"> <input value="<<" type="submit"> </form> </td>     
    <td>'.$dati['mese_text'].'</td>     
    <
    td><form action="calendarioprenotazioni.php?st=1&p='.$p.'" method="post"> <input value=">>" type="submit" > </form> </td>     
    </
    tr>     </div>'.     '<table align="center" border="1">         
    <
    tr>             <td class="lista">LU</td>             <td class="lista">MA</td>             <td class="lista">ME</td>             <td class="lista">GI</td>             <td class="lista">VE</td>             <td class="lista">SA</td>             <td class="lista">DO</td>         </tr>'; // Schema fisso dei giorni della settimana       
    for($ciclo = 0; $ciclo < $dati['
    settimane_mese']; $ciclo++)     
    {         $text .= '
    <tr>'; // Aggiungo una griglia                   for($subciclo = 1; $subciclo <= 7; $subciclo++)         {             if($subciclo != $dati['start'] && $info['can_start'] == FALSE)             {                  $text .= '<td class="lista"></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             }                                   
    $dati['
    current_day'] = $subciclo+($ciclo*7)-$info['to_less']; // Calcolo il giorno da mostrare                          
    if($dati['
    current_day'] <= $dati['giorni_mese'])             {                  if($dati['current_day'] == $dati['oggi']) // Controllo se il giorno da mostrare è quello di oggi                 {                     
    $tdclass = '
    cale'; // Cambio stile in 'oggi' se è oggi                 } else {                     $tdclass = 'lista'; // Cambio stile in 'Default' se non è oggi                 }                  
    $text .= '
    <td class="'.$tdclass.'">'.$dati['current_day'].'</td>'; // Poi aggiungo la cella             } 
    else {                              break;             }                       }          $text .= '
    </tr>'; // Chiudo la griglia     }      $text .= '</table>'; // Chiudo la tabella     echo $text;     ?> 

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    70
    Scusate ma ho postato il codice in maniera orrenda.......... VVoVe:

  3. #3
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    A parte quello ma hai mai pensato alla funzione date() ?????

    Funzione date

    Dacci un occhio e scoprirai che molti conti li fa gia' in automatico.

    Php fornisce un set fantastico di funzioni per gestire le date ti dice se un anno e' bisestile o no.
    Ti dice quanti giorni ha il mese corrente, che giorno della settimana e' che giorno dell'anno etc etc etc e tutto cio' lo si fa a partire dalle timestamp e hai a dispozione molte funzioni interessanti :

    mktime( $ore , $minuti , $secondi , $mese , $giorno , $anno )
    restituisce la Unix timestamp

    time()
    restituisce la timestamp della data-ora corrente

    date( "Y-m-d H:i:s" , $time() );
    converte la timestamp in un formato di data leggibile (vai a lal documentazione linkata sopra per maggiori info)

    Insomma non ti serve scrivere troppo codice php per gestire un calendario la maggior parte del lavoro e' gia' fatta nelle funzioni incluse in php.


    P.S.
    Ricordo inoltre che e' SEMPRE buona pratica consultare la documentazione della tecnologia che si usa prima di iniziare a fare le cose perche' si puo' scoprire che ci sono funzioni/classi/metodi gia' pronti a risolverci i problemi.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    70
    grazie mille per l'aiuto sono andato a dare un occhiata, pero non so se mi sbaglio, ma non c'e un comando che ti permette di prendere gli anni successivi, quello mi sa che bisogna farlo manualmente, nel senso con quanttro righe di codice, giusto??

  5. #5
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Beh si, devi farlo te e puoi gestirlo con la funzione mktime creando la timestamp per la data che ti serve.

    Oppure puoi gestire direttamente la timestamp gestondo a mano i conteggi.

    Ti consiglio la prima soluzione.

    Esempio :
    Che giorno della settimana cade il primo agosto dall'anno 1990 al 2000 ???
    Codice PHP:
    $giorni = array("Domenica" "Lunedi" "Martedi" "Mercoledi" "Giovedi" "Venerdi" "Sabato");

    for( 
    $i=1990 $i<=2000 $i++ )
    {
         
    $tmp =  mktime("00","00" ,"00" "1" "7"$i);

         echo 
    "$i - ".$giorni[date"w" $tmp)]."
    "
    ;



  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    70
    Grazie mille per la risposta, alla fine ho deciso di farlo in maniera diversa adesso posto la mia soluzione sperando che sia comprensibile
    Codice PHP:
    $dati['giorni_mesi'] =  array(31031303130313130313031); // Array con i giorni dei mesi     
    $dati['anno'] = date("Y"time()); // Anno     
    $dati['mese_num'] = date("n",  time()); // Mese corrente ( numerico )     
    $m=$dati['mese_num'];     
    $a=$dati['mese_num'];     
    $aa=$dati['anno'];          
    if(isset(
    $_GET['sta'])){     
    $sta $_GET['sta'];     
    if(
    $sta==1){     
    $dati['anno']=$_GET['newanno'];     
    $m=$_GET['m'];     
    $dati['mese_num']=$m;     }}          
    if (
    $st==){     $m=$_GET['m'];     
    $dati['mese_num']=$m;     
    $dati['mese_num']=$dati['mese_num']+1;     
    $m=$dati['mese_num'];     
    if (
    $m==13){$dati['anno']+=1;  
    $m=1$dati['mese_num']=1$sta=1;}      } 
    elseif (
    $st==2){                  
    $m=$_GET['m'];             
    $dati['mese_num']=$m-1;             
    $m=$dati['mese_num'];             
    $new=$_GET['newanno'];      
    if (
    $m==0){$dati['anno']-=1;  
    $m=12$dati['mese_num']=12$sta=1;}     
    if (
    $m<$a && $aa==$new && $m!=) {         echo "<script language='javascript'>             alert('Non si possono prenotare visite prima del giorno corrente');             self.location.replace(\"calendarioprenotazioni.php\");             </script>";         }                  } 
    Io avevo bisogno anche di bloccare il ritorno indietro prima del mese corrente e quindi h usato un alert, forse è un po confusionario come codice ma devo un attimo ancora ripulirlo.

  7. #7
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    MI sembra un po' folle il codice che hai scritto.

    Cmq ora sono impegnato stasera lo rigurado con calma e ti mostro una soluzione molto poiu' semplice ed elegante( sempre se non la propone qlkun'altro prima di me) .

    A dopo ciau

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.