Visualizzazione dei risultati da 1 a 8 su 8

Discussione: mktime con gg/mm/aaaa

  1. #1
    Utente di HTML.it L'avatar di blob696
    Registrato dal
    Feb 2007
    Messaggi
    119

    mktime con gg/mm/aaaa

    tramite un form mi arriva una data come scritta in oggetto (es. 16/03/2011), io vorrei trasformare questa data in timestamp.

    potrei fare cosi:

    Codice PHP:

    $data 
    $_POST['data'];
    $data str_replace("/"","$data);
    $data mktime("0","0","0",$data); 
    MA NON VA, PERCHE' LA FUNZIONE MKTIME ACCETTA PRIMA IL MESE, POI IL GIORNO E POI L'ANNO.

    Come posso fare?

  2. #2
    codice:
    list($giorno, $mese, $anno) = explode('/', $_POST['data']);
    
    $data = mktime("0","0","0", $mese, $giorno, $anno);
    devi pero' stare attento agli zeri prima del giorno o mese, perche' php considera ottali i numeri che iniziano per 0. Quindi vai bene da 01 a 07 (uguali tra ottali e decimali) ma poi non piu'....

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

  3. #3
    Utente di HTML.it L'avatar di blob696
    Registrato dal
    Feb 2007
    Messaggi
    119
    grazie.

    Per il discorso degli ottali come faccio?

    Cioè se ho 09/09/2010 non me lo accetta?

  4. #4
    Originariamente inviato da blob696
    grazie.

    Per il discorso degli ottali come faccio?

    Cioè se ho 09/09/2010 non me lo accetta?
    provare....

    Il mio e' solo un avviso. Solitamente il casting a numerico del valore avviene in modo automatico. Nel caso trovassi qualche incongruenza hai almeno una idea di dove cercare.

    Tieni presente che $_POST rende esclusivamente delle stringhe, ma le successive funzioni richiamate possono convertire il valore stringa in numerico. Se vuoi essere sicuro usa (int) davanti alla variabile $giorno e $mese.

    verifica i contenuti delle variabili con var_dump. Un esempio:

    Codice PHP:
    $_POST['data'] = '09/08/2011';

    list(
    $giorno$mese$anno) = explode('/'$_POST['data']);

    var_dump($mese);
    var_dump((int)$mese);

    $data mktime("0","0","0", (int)$mese, (int)$giorno$anno); 

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

  5. #5
    I numeri con prefisso 0 vengono interpretati (male, peraltro) come ottali solo se scritti letteralmente nel codice tipo:
    codice:
    $num = 09;
    ma mai come conversione automatica da stringa., quindi in questo caso non c'e' pericolo.

    In ogni caso il casting e' comunque inutile perche' se il numero viene interpretato male non si recupera, esempio:
    codice:
    $num = 09;
    echo $num; // stampa 0
    echo (int) $num; // stampa sempre 0

  6. #6
    ma certo.... 09 ottale e' un errore e quindi ti stampa sempre 0. Grande per un valore passato a mktime.

    prova con '09' tra apici come appunto si presenterebbe una stringa per vedere se funziona il casting.

    Codice PHP:
    $num '09';
    echo 
    $num// stampa 09
    echo (int) $num// stampa 9 
    ad ogni modo il mio era solo una annotazione sui numeri che iniziano con 0 e nulla piu'.

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

  7. #7
    Si ma il problema si presenterebbe solo se tu scrivessi direttamente i numeri nella chiamata a mktime(), nessun casting a ottale viene mai fatto implicitamente.

    In ogni caso sarebbe utile se PHP emettesse almeno un warning invece di trasformare arbitrariamente e silenziosamente 09 in 0.

  8. #8
    Originariamente inviato da k.b
    In ogni caso sarebbe utile se PHP emettesse almeno un warning invece di trasformare arbitrariamente e silenziosamente 09 in 0.
    Vedo che alla fine hai compreso il motivo del mio avviso.

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

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 © 2024 vBulletin Solutions, Inc. All rights reserved.