Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    strftime e data in italiano

    Salve,
    sto impazzendo con strftime().

    Nel mio codice ho:

    Codice PHP:
    setlocale(LC_TIME,"it-IT");
    $ts $_GET['ts'];
    $annomesegiorno date("Y-m-d"$ts);
    $giorno strftime("%A"strtotime($annomesegiorno)); 
    $ts è un normalissimo timestamp creato con mktime()

    Si tratta di una sorta di agenda su due frame in una pagina principale.
    In un frame tutti gli appuntamenti della giornata sotto forma di link e nell'altro il dettaglio dell'appuntamento con il codice di cui sopra.
    Nella pagina principale c'è solo un form per selezionare il giorno e per comodità ho fatto in modo che, ricaricando la pagina all'invio del form, oltre a visualizzare gli appuntamenti della giornata in un frame, nell'altro mostra già il primo appuntamento.

    L'inghippo è proprio qui: se clicco sui link nel frame per caricare il dettaglio nell'altro frame il giorno della settimana viene visualizzato in italiano, ma inviando il form per selezionare un giorno qualsiasi, il primo appuntamento caricato in automatico ha il giorno in inglese eppure la pagina caricata è la stessa e tutto ciò che gli viene passato è il timestamp con l'url tipo pagina.php?ts=1184349600
    L'unica differenza è che invece di aggiornare il frame cliccando su un link, inviando il form si ricarica la pagina "contenitore" è viene generato dinamicamente l'url del frame inserendo il timestamp ricevuto tramite il form (e quindi con l'array $_POST), ma per il frame il timestamp è ricevuto sempre tramite $_GET.

    Avete un'idea di dove sia l'errore?
    Eppure il codice è semplice e non è la prima volta che uso strftime.
    Help!!!!!
    Nemesis

  2. #2
    non e' molto chiara la cosa. Se stampa il giorno in inglese significa che non viene assunto il setlocale.

    hai una ridondanza nel tuo codice. strtotime($annomesegiorno) non serve.

    $giorno = strftime("%A", $ts);

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3

    Re: strftime e data in italiano

    Originariamente inviato da nemesis_83
    Avete un'idea di dove sia l'errore?
    Eppure il codice è semplice e non è la prima volta che uso strftime.
    Se vuoi essere certo della completa compatibilita' lascierei stare strftime per tradurre il nome del giorno... fai un tuo array:

    Codice PHP:
    $giorni = array(0=>'Domenica'1=>'Lunedì'2=>'Martedì'3=>'Mercoledì',
                    
    4=>'Giovedì'5=>'Venerdì'6=>'Sabato');

    $ts $_GET['ts'];

    $giorno date('w'$ts);

    $annomesegiorno date("Y-m-d"$ts);

    $giorno $giorni[$giorno]; 
    sei sicuro che funziona sempre sia con win che con linux e mac ....

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    Sì infatti nell'immediato ho fatto così solo che ho risolto con una case invece di un array. Forse era meglio la tua soluzione, ma comunque funziona lo stesso.

    Volevo solo capire come mai mi faceva questo scherzo visto che la stessa funzione l'ho usata sullo stesso server, con la stessa configurazione di Apache e Php. L'unica differenza è che in quella pagina la funzione non è usata in un frame, ma mi sembra impossibile che dipenda da quello.

    Comunque grazie mille!
    Nemesis

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    321
    secondo me questo codice e' molto più leggero del tuo, se ti piò essere di aiuto, A presto.

    // funzione per ottenere la data in italiano
    setlocale(LC_TIME,'ITA');
    $data = strftime("%A %d %B %Y");

  6. #6
    Originariamente inviato da TEODORO
    secondo me questo codice e' molto più leggero del tuo, se ti piò essere di aiuto, A presto.

    // funzione per ottenere la data in italiano
    setlocale(LC_TIME,'ITA');
    $data = strftime("%A %d %B %Y");
    il problema puo' essere nella portabilita' del codice per setlocale(). Dal manuale:

    La funzione restituisce le nuove impostazioni locali, oppure FALSE se la funzionalità di localizzazione non è implementata sul sistema, se l'impostazione richiesta non esiste, oppure se il nome della categoria non è valida. Un nome di categoria non valido genera anche un warning. I nomi delle categoria possono essere trovati nella RFC 1766 e ISO 639. Differenti sistemi hanno differenti schemi di denominazione delle impostazioni locali.

    Nota: Il valore restituito da setlocale() dipende dal sistema su cui gira il PHP. La funzione restituisce fedelmente quello che la funzione di sistema restituisce.
    that's all

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Rispondo brevemente:

    hai una ridondanza nel tuo codice. strtotime($annomesegiorno) non serve.

    $giorno = strftime("%A", $ts);
    LOL
    Ho perso mezz'ora su questo problema nonostante avessi controllato l'utilizzo della funzione sul manuale php.
    Per forza non funzionava, avevo scritto
    $giorno = strftime("%A", strtotime($ts));

    Alle 3 di notte io e le funzioni per le date siamo due estranei


    So che le impostazioni locali non sono proprio una scienza esatta, ma avevo già verificato in passato che sul sistema che devo usare funzionano.

    Il problema non è che funziona o non funziona e basta. Non funziona al primo caricamento della pagina che contiene il frame (e strftime è SOLO nel frame), mentre funziona ogni altra volta che ricarico solo il frame tramite un link. Ovviamente sia l'url del frame che il codice sono identici.
    E' per questo che non mi sono dato pace. Anche se ho risolto con una case, un motivo per cui si comporta così ci sarà. Ovviamente è più probabile che l'errore sia nel mio codice, ma è assurdo che funzioni sempre tranne al primo caricamento visto che tra l'altro si tratta di quelle 4 righe di codice.

    Comunque grazie a tutti per i consigli.
    Nemesis

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.