Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2014
    Messaggi
    58

    [PHP] problema con la data visualizzata

    Ciao a tutti, ho un problema con le date in php.
    Per spiegarlo, faccio un esempio di quello che accade.

    Ho una variabile con una data in questo formato:
    Codice PHP:
    $ex='3/5/18'
    Il formato è (g/m/aa)
    vorrei farla diventare nel formato (gg/mm/aa), cioè 03/05/18. Allora faccio così:
    Codice PHP:
    $ex=date('d/m/y',strtotime($ex)); 
    Quello che ottengo, però, è 05/03/18, cioè mese e giorno si sono invertiti! Tuttavia, il sistema sa che 05 è il mese e 03 è il giorno, perché se vado a convertire questa data in formato unix con:
    Codice PHP:
    $ora='12:30';
    $data="$ex $ora";
    $data=date('U',strtorime($data)); 
    mi esce il valore unix giusto, cioè quello corrispondente alla data 3 maggio 2018 ore 12:30! Perché avviene questo scambio di mese e giorno nella visualizzazione? come posso risolvere il problema?

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    In realtà no, provando questo codice
    Codice PHP:
    $ex '3/5/18'
    $ora '12:30';
    $data "$ex $ora";
    $data date'U'strtotime($data) ); 

    // timestam Unix
    echo $data "<br>";

    // timestmp Unix precedente convertito in data
    echo date"d/m/y H:i"$data ); 
    la seconda stampa risulta 5 Marzo e non 3 Maggio come dovrebbe essere se in formato Unix il timestamp fosse corretto.
    Quindi il codice si comporta in modo coerente.

    Il tuo "problema" sta nel strtotime(), leggine la documentazione (cosa da fare sempre quando una funzione o parte di codice non fa ciò che ti aspetti), scoprirai che si risolve in modo banale: link

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2014
    Messaggi
    58
    Ciao Alhazred, grazie della risposta.
    Ho dato un'occhiata alla documentazione, e l'unica cosa che ho potuto notare è che strtotime() legge le date in formato americano, quindi prima mese e poi giorno. È questo il punto? Quindi per risolvere dovrei fare
    $ex=date ('m/d/y', $ex), cioè invertendo 'd' ed 'm'?
    Se lo faccio funziona, la data stampata è quella voluta, però in realtà già ci avevo provato e poi mi dava problemi se lo andavo a convertire in formato unix, in particolare ottenevo un numero molto lontano da quello corrispondente al 3 maggio.

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Non proprio.
    strtotime() legge le date americane se usi gli slash, 3/5/2018 è 5 Marzo, legge le date eruopee se usi i dash, 3-5-2018 è 3 Maggio.
    Il tuo formato è però con l'anno di 2 cifre, quindi 3-5-18 viene interpretato come formato y-m-d, quindi 18 Maggio 2003.
    La soluzione è usare createFromFormat() come spiegato nell'esempio.
    Ultima modifica di Alhazred; 03-05-2018 a 10:12

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.