Visualizzazione risultati 1 fino 14 di 14

Discussione: Script con le date...

  1. #1
    chiedimiditutto non è connesso Neofita
    Data registrazione
    03-02-2013
    Messaggi
    27

    Predefinito Script con le date...

    Ciao,
    ho un paio di curiosità...
    ho fatto un form di inserimento data di nascita e con un submit mi calcola i giorni e anni di vita...
    dato che il calcolo non è corretto volevo chiedervi dove sto sbagliando

    Form:
    Codice HTML:
    <html>
    <head><title>Form</title></head>
    <body>
    <!-- file form.html -->
    <?
    include "barra.php3";
    ?>
    <form action="/new/scripts/eta.php" method="get">
    <input type="date" name="età">
    <input type="submit" value="Invia i dati">
    </form>
    </body>
    </html>
    file eta.php
    Codice PHP:
    <?
    echo "la tua data di nascita è ". $_GET['età'] ;
    echo
    $data3 = date('d m y');
    echo
    "sei a questo mondo da ";
    echo (
    $data3 - $_GET['età'])/(60*60*24);
    echo
    " giorni cioè ";
    echo (
    $data3 - $_GET['età'])/(60*60*24*365);
    echo
    " anni ";
    ?>
    grazie
    Ultima modifica di alemoppo : 31-07-2014 alle ore 11.38.57 Motivo: +tag [php][html]

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,685

    Predefinito

    Quando fai:
    Codice PHP:
    ($data3 - $_GET['età'])
    Stai sottraendo due stringhe, e non ha molto senso.

    Per ricavare la sottrazione tra due stringhe, devi o sottrarre i timestamp, o usare la time_diff().

    Nel primo caso, per convertire la stringa che ti passa l'utente in timestamp devi usare ad esempio la mktime(), e time() per ricavare il timestamp attuale.
    Nel secondo caso, si tratta semplicemente di utilizzare la funzione.

    Ciao!

  3. #3
    chiedimiditutto non è connesso Neofita
    Data registrazione
    03-02-2013
    Messaggi
    27

    Predefinito

    intanto ti ringrazio ma ti chiedo anche come posso ricavare un timestamp di una data specifica da una variabile come nel mio caso?

  4. #4
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,685

    Predefinito

    Sopra ti ho indicato la funzione: la mktime.

    Ciao!

  5. #5
    chiedimiditutto non è connesso Neofita
    Data registrazione
    03-02-2013
    Messaggi
    27

    Predefinito

    scusa ma sono alle prime armi,
    quindi devo fare mktime ($variabile) ?

  6. #6
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,685

    Predefinito

    Leggi il link che ti ho lasciato alla documentazione. Ci sono anche gli esempi. Ovviamente quel che non capisci chiedi pure.

    Ciao!

  7. #7
    chiedimiditutto non è connesso Neofita
    Data registrazione
    03-02-2013
    Messaggi
    27

    Predefinito

    Ciao,
    il primo caso data3 l'ho risolto con il mktime come mi hai suggerito,
    quello che non ho capito è cosa intendi con "Nel secondo caso, si tratta semplicemente di utilizzare la funzione" l'utente inserisce una data che mi arriva come stringa, da quella devo ricavare in timestamp per poi sottrarlo ma è questa conversione che non ho capito...

    Grazie

  8. #8
    chiedimiditutto non è connesso Neofita
    Data registrazione
    03-02-2013
    Messaggi
    27

    Predefinito

    cioè non ho capito come si fa a trasformare la stringa in timestamp

  9. #9
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,685

    Predefinito

    mktime() vuole in ingresso l'ora, minuti, secondi, mese, giorno, anno. L'unica complicazione è che li vuole separati, mentre l'utente li inserisce "in un'unica stringa". Quindi dovrai separarli in qualche modo. Devi conoscere il formato di inserimento della data da parte dell'utente: sarà 4-8-2014 oppure 2014-8-4 oppure 4/8/2014 oppure 4 8 2014... ?
    A seconda del formato, devi estrarre il mese, giorno e anno e separarli.
    Una soluzione sarebbe utilizzare le espressioni regolari. Altrimenti puoi utilizzare le funzioni delle stringhe, in questo caso penso che con le substr() e strpos() si può risolvere tutto.
    In questo caso però, visto che si tratta di date, googlando un minimo ho trovato una soluzione molto migliore, senza nemmeno utilizzare la mktime():
    Codice PHP:
    $timestamp = DateTime::createFromFormat("d-m-Y", $_GET['eta'])->getTimestamp();
    p.s: non utilizzare gli accenti nelle chiavi dei parametri perché possono dar problemi. Quindi invece di "età" usa "eta" o qualsiasi altra parola.

    Ciao!

  10. #10
    chiedimiditutto non è connesso Neofita
    Data registrazione
    03-02-2013
    Messaggi
    27

    Predefinito

    grazie,
    ho tolto l'accento e ho provato con il metodo che mi hai suggerito,
    però mi restituisce questo errore:
    Fatal error: Call to undefined method DateTime::createFromFormat()

    ho provato ad aggiornare php alla 5.3, non appare più il messaggio di errore ma mi ritorna una pagina vuota...
    Ultima modifica di chiedimiditutto : 04-08-2014 alle ore 16.38.54

  11. #11
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,685

    Predefinito

    Puoi mostrare il codice?

    Ciao!

  12. #12
    chiedimiditutto non è connesso Neofita
    Data registrazione
    03-02-2013
    Messaggi
    27

    Predefinito

    ho fatto un mischione di tutto e forse ci siamo, devo ancora perfezionare il risultato:

    codice form:
    Codice HTML:
    <html>
    <head><title>Form</title></head>
    <body>
    <!-- file form.html -->
    <?
    include "barra.php3";
    ?>
    <form action="/new/scripts/eta.php" method="get">
    <input type="date" name="eta">
    <input type="submit" value="Invia i dati">
    </form>
    </body>
    </html>
    codice script:
    Codice PHP:
    <?
    $nascita
    = DateTime::createFromFormat("d-m-Y", $_GET['eta']);
    if (
    $nascita instanceof DateTime)
    $nascita->getTimestamp();
    else
    "errore";
    echo
    "la tua data di nascita è ";
    echo
    $_GET['eta'];
    $dataoggi = time();
    echo
    " sei a questo mondo da ";
    echo (
    $dataoggi - $nascita) ." secondi, quindi ";
    echo (
    $dataoggi - $nascita)/(60*60*24) ." giorni, quindi ";
    echo (
    $dataoggi - $nascita)/(60*60*24*365) ." anni ";


    ?>
    Ultima modifica di alemoppo : 05-08-2014 alle ore 12.40.20

  13. #13
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,685

    Predefinito

    Non ho testato lo script ma non mi sembra ci siano errori nel suo funzionamento.

    Ciao!

  14. #14
    chiedimiditutto non è connesso Neofita
    Data registrazione
    03-02-2013
    Messaggi
    27

    Predefinito

    così mi funziona solo che inserendo la data mi da 2 anni in più, devo provare a ricavare il timestamp in uscita e capire dove sta l'errore...
    almeno lo scoglio grande l'ho superato...

    Grazie a tutti

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •