Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: Controllo data

  1. #1

    Controllo data

    Salve a tutti , ho un problemino che vorrei risolvere in maniera dinamica.
    Ho una tabella con delle news da aggiungere...
    Vorrei fare in modo che le più aggiornate (notizie pubblicate massimo da 5 gg) vengano visualizzate in grassetto.
    C'ho provato ma è un impresa troppo difficile per il mio livello
    La più grande forza a disposizione dell'umanità è la non violenza (Ghandi).
    (15/06/2003 - 16 points, 17 rembounds and 1 standing ovation x Admiral David Robinson ... San Antonio Spurs~ 2003/5 NBA champions)

  2. #2
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    ciao Bigmaul,
    spiega meglio il contesto, magari posta un esempio di un paio di righe di questa tabella

    se l' output è gestito lato server valuta la possibilità di procedere su questo fronte se ti torna + comodo

  3. #3
    No, nessun linguaggio lato server.
    Vorrei fare in modo che le notizie che inserisco (data in una colonna e titolo dell'articolo in un'altra) vengano formattate automaticamente in base alla data (nella prima colonna).
    Quelle non più vecchie di 5 gg. in grassetto mentre le altre normali.

    Un esempio molto vago e visibile a questo link.

    Su quel sito sono in grassetto soltanto per un giorno.
    La più grande forza a disposizione dell'umanità è la non violenza (Ghandi).
    (15/06/2003 - 16 points, 17 rembounds and 1 standing ovation x Admiral David Robinson ... San Antonio Spurs~ 2003/5 NBA champions)

  4. #4
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    ok, dammi qualche minuto che provo a buttare giù qualcosa

  5. #5
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    un esempio, forse + complesso del necessario
    Codice PHP:
    <script type="text/javascript">
    <!--
    var 
    oggi=new Date()

    function 
    retData(txt){
      
    // ottiene la data contenuta nel td come aaaa_mm_gg
      // separa le parti per "_" e ritorna l' ogg date di quella data
      
    txt=txt.replace(/^.*(\d{2})\/(\d{2})\/(\d{4}).*$/, "$3_$2_$1").split("_");
      return new 
    Date(parseInt(txt[0]),parseInt(txt[1])-1,parseInt(txt[2]));
    }

    function 
    evidenziaRighe(){
      if(
    document.getElementById && document.getElementsByTagName){
        
    // riferimento ai tr della tabella "news"
        
    var ntr=document.getElementById('news').getElementsByTagName("TR");
        
    // se supporta l' innerHTML
        
    if(ntr[0].innerHTML){
          
    // cicla x tutti i tr
          
    for(var k=0;k<ntr.length;k++){
            
    // la differenza è = all' arrotondamento verso l' intero + basso 
            // della differenza tra data odierna e data ritornata per il contenuto del primo td del tr attuale
            // divisa per i millisecondi di un giorno
            
    var diff=Math.floor((oggi-retData(ntr[k].getElementsByTagName("TD")[0].innerHTML))/86400000);
            if(
    diff<=5){
              
    // riferimento ai td della riga attuale
              
    ntd=ntr[k].getElementsByTagName("TD");
              
    // cicla per il numero di td
              
    for(var q=0;q<ntd.length;q++){
                
    // setta font in grassetto per quel td
                // N.b. si potrebbe evitare di ciclare trai td, assegnando il fontWeight al tr
                // ma così non prevarrebbe su eventuale regola riguardante lo spessore del font per i td
            // idem volendo assegnare nuovo className al tr
                
    ntd[q].style.fontWeight="bold";
              }
            }
          }
        }
      }     
    }
    window.onload=evidenziaRighe
    //-->
    </script>
    ...
    <table border="1" cellspacing="0" cellpadding="3" id="news">
    <tbody>
    <tr>
    <td>28/07/2004 --></td>
    <td>[url="#"]quinta notizia[/url]</td>
    </tr>
    <tr>
    <td>[27/07/2004]</td> 
    <td>[url="#"]quarta notizia[/url]</td>
    </tr>
    <tr>
    <td>23/07/2004</td> 
    <td>[url="#"]terza notizia[/url]</td>
    </tr>
    <tr>
    <td>21/03/2004</td> 
    <td>[url="#"]seconda notizia[/url]</td>
    </tr>
    <tr>
    <td>18/02/2003</td> 
    <td>[url="#"]prima notizia[/url]</td>
    </tr>
    </tbody>
    </table> 
    si estenderebbe la compatibilità facendo scrivere runtime (con document.write) la tabella da javascript
    ma ho immaginato volessi operare su una tabella presente a tutti gli effetti nella pagina
    ciao

  6. #6
    Grazie mille...la provo e ti dico
    La più grande forza a disposizione dell'umanità è la non violenza (Ghandi).
    (15/06/2003 - 16 points, 17 rembounds and 1 standing ovation x Admiral David Robinson ... San Antonio Spurs~ 2003/5 NBA champions)

  7. #7
    Uhmm...mi da errore su questa riga
    txt=txt.replace(/^.*(d{2})/(d{2})/(d{4}).*$/, "$3_$2_$1").split("_");

    ...a dire il vero non capisco cosa c'è scritto perciò non posso provare ad intervenire
    La più grande forza a disposizione dell'umanità è la non violenza (Ghandi).
    (15/06/2003 - 16 points, 17 rembounds and 1 standing ovation x Admiral David Robinson ... San Antonio Spurs~ 2003/5 NBA champions)

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Originariamente inviato da bigmaul
    Uhmm...mi da errore su questa riga
    txt=txt.replace(/^.*(d{2})/(d{2})/(d{4}).*$/, "$3_$2_$1").split("_");

    ...a dire il vero non capisco cosa c'è scritto perciò non posso provare ad intervenire
    Hai dimenticato qualche backslash.

    Ritrova il file originale, premi il bottone quote (in basso a destra), e da li` fai copia-incolla.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  9. #9
    Hai ragione, ora funziona benissimo grazie mille x l'aiuto.

    Cmq, se non chiedo troppo, potreste chiarirmi quella riga di comando ?
    (Magari può tornarmi utile per futuri lavori...).
    La più grande forza a disposizione dell'umanità è la non violenza (Ghandi).
    (15/06/2003 - 16 points, 17 rembounds and 1 standing ovation x Admiral David Robinson ... San Antonio Spurs~ 2003/5 NBA champions)

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Senza usare le regexp sarebbe necessario un programma complesso.

    Quella riga fa il replace di alcune stringhe, le unisce, indi le spezza nuovamente.

    replace(/^.*(\d{2})\/(\d{2})\/(\d{4}).*$/, "$3_$2_$1")

    dopo la virgola, $1, $2, $3 rappresentano quanto racchiuso nelle parentesi (nell'ordine). Quindi viene anche invertito l'ordine dei pezzi trovati.

    ^ inizio stringa
    .* qualsiasi carattere (zero o piu` volte)
    \d{2} esattamente due caratteri numerici
    \/ il carattere /
    ...
    $ fine stringa

    Nota che potrebbe non validare una stringa cosi`:
    21/12/2004ciao3

    per cui sarebbe piu` opportuno inserire un ? dopo il primo *:
    /^.*?(\d{2})\/(\d{2})\/(\d{4}).*$/

    la stringa viene sostituita con i tre pezzi in ordine inverso, inframezzati da _ .

    La funzione split("_") spezza la stringa cosi` ottenuta in base al carattere "_", per cui alla fine avrai un vettore che contiene:
    l'anno al primo posto (indice 0), il mese al secondo, il giorno al terzo.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

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.