Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1

    [php] Calendario dinamico

    Ave!

    Sto cercando di creare un calendario dinamico.
    Ora: so che trafficando per la rete se ne trovano di belli e pronti tra moduli di cms e script pronti all'uso ma siccome mi sto intignando vorrei capire l'esatto funzionamento di quello che pubblico

    per ora ho fatto, per quando poco, quanto segue:

    Codice PHP:
    $giorno date("j");
    $mese date("n");
    $anno date("Y");

    $settimana date("w");
    $giornosettimana = array ("Domenica""Lunedì""Martedì""Mercoledì","Giovedì""Venerdì""Sabato");

    $nomemese $mese;
    switch (
    $nomemese) {
    case 
    '01'$nomemese ='Gennaio'$n_giorni 31; break;
    case 
    '02'$nomemese ='Febbraio'$n_giorni 28; break;
    case 
    '03'$nomemese ='Marzo'$n_giorni 31; break;
    case 
    '04'$nomemese ='Aprile'$n_giorni 30; break;
    case 
    '05'$nomemese ='Maggio'$n_giorni 31; break;
    case 
    '06'$nomemese ='Giugno'$n_giorni 30; break;
    case 
    '07'$nomemese ='Luglio'$n_giorni 31; break;
    case 
    '08'$nomemese ='Agosto'$n_giorni 31; break;
    case 
    '09'$nomemese ='Settembre'$n_giorni 30; break;
    case 
    '10'$nomemese ='Ottobre'$n_giorni 31; break;
    case 
    '11'$nomemese ='Novembre'$n_giorni 30; break;
    case 
    '12'$nomemese ='Dicembre'$n_giorni 31; break;


    $data_odierna $giornosettimana[$settimana].","." ".$giorno." ".$nomemese." ".$anno
    da qui riesco, tramite una banale tabella, ad incolonnare il tutto...ma le mie domande sono:

    1) come faccio a sudduvidere i giorni per le varie settimane quindi creare le righe necessarie (dato che in alcuni casi me ne occorrerebbero 4 e in altre 5 a seconda di come "scavallano" prima e ultima settimana) per poi far proseguire di conseguenza gli altri giorni

    2) come faccio a far partire il primo giorno del mese nel giorno della settimana relativo (es. un mercoledì 1 novembre 2006 dovrebbe stampare da metà riga)

    3) sebbene è una questione che avrò nel 2008 (ma sono un po' lungimirante), come faccio a calcolare il febbraio di 29 dì?

    ringrazio le buone anime che vorranno darmi una mano nel risolvere gli arcani

    Ritengo di avere 2 grandi pregi: il primo è una memoria di ferro; il secondo...mmmhhh va beh ora proprio non me lo ricordo!

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    99
    ho fatto qualcosa del genere in questo modo:

    partendo dalla data odierna, mi costruisco un array con tutti i giorni del mese utilizzando questa funzione in php:
    http://it2.php.net/manual/it/function.mktime.php

  3. #3
    nel ringraziare darkmik per il suggerimento devo però annunciare che...alla fine mi sono arreso e ho adottato questo:

    Codice PHP:
    <?php
    function print_calendar($month="",$year="")
    {
    // impostiamo la data attuale
    $now getdate(time());
    // controlliamo mese e anno passati
    if ( empty($month) OR empty($year) OR !is_numeric($month) OR !is_numeric($year) OR !@checkdate($month,1,$year) )
    {
    $month $now['mon'];
    $year $now['year'];
    }
    // unix timestamp del primo giorno
    // del mese e dell'anno ricevuti
    $time mktime(0,0,0$month1$year);
    // genera l'array con le informazioni
    $date getdate($time);
    // giorni totali per il mese e anno
    $day_total cal_days_in_month(CAL_GREGORIAN$date['mon'], $date['year']);
    //stampa mese e anno in oggetto
    //in italiano come intestazione
    setlocale(LC_TIME,"it_IT");
    $mese_anno strftime('%B',$date[0]). " " .$year;
    echo 
    "<table><tr><td colspan=\"7\">[b]$mese_anno[/b]</td></tr>\n";
    // stampa le abbreviazioni dei giorni della settimana
    echo "<tr><td>Do</td><td>Lu</td><td>Ma</td><td>Me</td> <td>Gi</td><td>Ve</td><td>Sa</td></tr>\n";
    for (
    $i 0$i 6$i++)
    {
    echo 
    '<tr>';
    for (
    $j 1$j <= 7$j++)
    {
    $day_number $j $i*$date['wday'];
    //stampa la cella con il giorno
    echo '<td';
    if (
    $day_number AND $day_number <= $day_total)
    {
    // borda di rosso se è oggi
    if ($day_number == $now['mday'] AND $month == $now['mon'] AND $year == $now['year'])
    {
    echo 
    " style=\"border: 1px solid #cc0000;\" ";
    }
    echo 
    ">$day_number";
    }
    else
    {
    //stampa una cella vuota se non esiste il giorno
    echo '> ';
    }
    echo 
    '</td>';
    }
    echo 
    "</tr>\n";
    if (
    $day_number >= $day_total AND $i != 6)
    break;
    }
    echo 
    "</table>\n";
    }


    echo 
    print_calendar()
    ?>
    ...trovato tra gli articoli di html.it!

    siccome però stampa la domenica come primo giorno della settimana e a me piacerebbe fosse il lunedì (all'italiana) come posso settare l'array $date['wday'] (ammesso che sia questo un'array o un array di un array...) in modo tale che 0 sia lunedì e 6 domenica invece che 0 domenica e 6 sabato?
    Ritengo di avere 2 grandi pregi: il primo è una memoria di ferro; il secondo...mmmhhh va beh ora proprio non me lo ricordo!

  4. #4
    nel mio blog ho messo questo, ho modificato il codice in modo che esca lunedì per primo
    calendario del mio blog

  5. #5
    grande nivasio

    esattamente il risultato che volevo ottenere...
    ...mi metto subito a studiare l'artefatto


    grazie
    Ritengo di avere 2 grandi pregi: il primo è una memoria di ferro; il secondo...mmmhhh va beh ora proprio non me lo ricordo!

  6. #6
    Penso di averlo modicato da un codice di un manuale, ma avendo trasportato dal vecchio pc centinaia di codici non so + da quale...a volte mescolo anche 3 o 4 esempi.
    Un tardo hegeliano di Busalla / allevava un gorilla nella stalla
    citando Adorno nell notti chiare / finché il primate stanco di ascoltare
    lo strangolò con una sciarpa gialla Dillo Con Parole Sue

  7. #7
    in effetti era una delle cose che tentavo di fare anch'io da stamattina...finchè non mi sono ritrovato variabili e funzioni di script che non c'azzecavano niente con lo script che volevo fare e ho sclerato!
    Ritengo di avere 2 grandi pregi: il primo è una memoria di ferro; il secondo...mmmhhh va beh ora proprio non me lo ricordo!

  8. #8
    Utente di HTML.it L'avatar di polinet
    Registrato dal
    Nov 2000
    Messaggi
    993

    da una occhiata a questo

    Ciao, io utilizzo questo script che tra l'altro ho trovato proprio qui!!! e poi l'ho modificato.
    utilizzo questo script in un sito per sapere quali giorni sono disponibili e quali no per affittare appartamenti.
    Utilizzo un DB MySql.
    Questo e`lo script:

    case "disponibilita";
    require ("connessione.php");
    $time = mktime(0,0,0, $month, 1, $year);
    // genera l'array con le informazioni
    $date = getdate($time);
    // giorni totali per il mese e anno con calendario gregoriano
    $day_total = cal_days_in_month(CAL_GREGORIAN, $date['mon'], $date['year']);
    //stampa mese e anno in oggetto in italiano come intestazione
    setlocale(LC_TIME,"it_IT");
    $mese_anno = strftime('%B',$date[0]). " " .$year;
    //metto la maiuscola alla prima lettera del mese
    $mese_anno = (ucfirst($mese_anno));
    echo("

    ");
    //stampo la tabella del mese selezionato
    echo "<table><tr><td colspan=\"7\">$mese_anno</td></tr>\n";
    //stampo le abbreviazioni dei giorni della settimana
    echo "<tr><td align=center bgcolor=#cecece>Do</td><td align=center bgcolor=#c0c0c0>Lu</td><td align=center bgcolor=#c0c0c0>Ma</td><td align=center bgcolor=#c0c0c0>Me</td><td align=center bgcolor=#c0c0c0>Gi</td><td align=center bgcolor=#c0c0c0>Ve</td><td align=center bgcolor=#c0c0c0>Sa</td></tr>\n";
    for ($i = 0; $i < 6; $i++) {
    echo '<tr>';
    for ($j = 1; $j <= 7; $j++) {
    $day_number = $j + $i*7 - $date['wday'];
    $day_number = sprintf('%02d', $day_number);
    //stampa la cella con il giorno
    echo '<td width=50 align=center bgcolor=#eeeeee style=font-face:verdana size=1';


    $sz_libero = "S";
    $sz_sql = "";
    $sz_sql = $sz_sql . " SELECT COUNT(*) AS LIBERO FROM tbl_cale WHERE ";
    $sz_sql = $sz_sql . " id_pro = '".$id_pro."'";
    $sz_sql = $sz_sql . " and month = '".$month."'";
    $sz_sql = $sz_sql . " and year = '".$year."'";
    $sz_sql = $sz_sql . " and day_number = '".$day_number."'";
    //$sz_sql = $sz_sql . " and stato = ' confermato' ";


    $db_libero = mysql_db_query($nome_db, $sz_sql, $db) or die(mysql_error());
    $rs_libero = mysql_fetch_array($db_libero);
    //$image = "<img src=img/busy.gif>";

    if ( $rs_libero ["LIBERO"] == 0 )
    {
    $sz_libero = "S";
    } else {
    $sz_libero = "N";
    }

    if ( $sz_libero == "S" )
    {
    if ($day_number > 0 AND $day_number <= $day_total)
    {
    $day_number = sprintf('%02d', $day_number);
    echo '<td width=50 align=center bgcolor=#eeeeee style=font-face:verdana size=1';
    echo " style=\"border: 1px solid #c0c0c0;\" ";
    echo ">$day_number";
    echo ' ';
    }
    } ELSE {
    //stampa una cella vuota se non esiste il giorno o occupato
    echo '<td width=50 align=center valign=middle bgcolor=#000000 style=font-face:arial size=1';
    echo " style=\"border: 1px solid #000000;\" ";
    echo ">BUSY";
    echo ' ';
    }
    echo '</td>';
    }
    echo "</tr>\n";
    if ($day_number >= $day_total AND $i != 6)

    break;

    Da un menu a tendina, passando il mese e l'anno lo script restituisce il mese richiesto e la disponibilita`. Vedo che ti hanno gia´passato questo script che e`facilmente modificabile.
    Provalo e`molto funzionale.
    Spero di esserti di aiuto, se hai qualche dubbio posta qui.
    Ciao
    ¿Hasta la pasta?

  9. #9
    grazie per il post polinet!

    studierò il tuo script approfondito che pare davvero interessante

    va da se che ti prendo alla lettera ed in caso di impacci vari non esiterò a postare


    Ritengo di avere 2 grandi pregi: il primo è una memoria di ferro; il secondo...mmmhhh va beh ora proprio non me lo ricordo!

  10. #10
    Windows mom: «Finish your veggies! There are processes in Ubuntu that are starving to death!»
    NoWhereBlog
    FlatPress Blog Flat file, valido xhtml, espandibile

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.