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

Discussione: Ricavare gli anni...

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    109

    Ricavare gli anni...

    Attualmente, grazie anche al suggerimento di un utente del forum, utilizzo questa funzione per ricavare gli anni di una persona in base alla data di nascita del tipo 1978-10-03... solo di recente però mi sono accorto che se l'anno è inferiore al 1970 mi restituisce sempre 36 anni... probabilmente la cosa è banale ma non capisco il motivo... se qualcuno mi sa dare una spiegazione oppure ha da proporre qualcosa di meglio ben venga...

    Codice PHP:

    function getAge($data){

      
    $dat1 explode('-'$data);
      
    $data_inizio mktime(0,0,0,$dat1[1],$dat1[2],$dat1[0]);

      
    $data2 date("Y-m-d");
      
    $dat2 explode('-'$data2);
      
    $data_oggi mktime(0,0,0,$dat2[1],$dat2[2],$dat2[0]);

      
    $diff $data_oggi-$data_inizio;
      
    $numerogiorni $diff/60/60/24;
      
    $numeroanni floor($numerogiorni/365);

      return 
    $numeroanni;
    }

    $data="1970-10-02";

    echo 
    getAge($data); 

  2. #2
    Utente di HTML.it L'avatar di Gumble
    Registrato dal
    Jun 2004
    Messaggi
    1,313
    non so che dirti.. a me funziona...
    alcool: la causa e la soluzione di tutti i problemi

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    109
    Si funziona dal 1970 in su, ma prova con 1960 restituisce sempre 36....

  4. #4
    Utente di HTML.it L'avatar di Gumble
    Registrato dal
    Jun 2004
    Messaggi
    1,313
    Originariamente inviato da intrigo
    Si funziona dal 1970 in su, ma prova con 1960 restituisce sempre 36....
    no no.. funziona proprio sempre!

    Codice PHP:
    <?

    function getAge($data){

      
    $dat1 explode('-'$data);
      
    $data_inizio mktime(0,0,0,$dat1[1],$dat1[2],$dat1[0]);

      
    $data2 date("Y-m-d");
      
    $dat2 explode('-'$data2);
      
    $data_oggi mktime(0,0,0,$dat2[1],$dat2[2],$dat2[0]);

      
    $diff $data_oggi-$data_inizio;
      
    $numerogiorni $diff/60/60/24;
      
    $numeroanni floor($numerogiorni/365);

      return 
    $numeroanni;
    }

    $data="1960-10-02";

    echo 
    getAge($data);
    //restituisce 46!!

    ?>
    alcool: la causa e la soluzione di tutti i problemi

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    306
    non ti sto dando la soluzione, perchè ora come ora dovrei fare qualche ricerca e non ho tempo, ma credo che il tuo problema sia che le date sul computer vengono calcolate a partire dal primo gennaio 1970, a partire da un numero, l'UNIX Timestamp, che parte appunto da quella data
    per chiarimenti: da un occhio qui
    guardati in giro le funzioni inerenti alla gestione delle date, dovresti trovare una risposta da solo
    ciao
    ilGuccino
    buonuomo.tomma@tiscali.it

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    109
    Cavoli hai ragione, l'ho provato su un'altro server e funziona... ma sul mio si ferma al 1970... qualcuno sa dirmi dove indagare? magari qualche impostazione del server o del php.ini

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    306
    insisto, secondo me la questione è legata all'UNIX Timestamp, cerca in quella direzione
    ciao
    ilGuccino
    buonuomo.tomma@tiscali.it

  8. #8
    Originariamente inviato da intrigo
    Cavoli hai ragione, l'ho provato su un'altro server e funziona... ma sul mio si ferma al 1970... qualcuno sa dirmi dove indagare? magari qualche impostazione del server o del php.ini
    windows non ti da il timestamp negativo e quindi con windows vale solo a partire dal 1-1-1970 00:00:00. UNIX timestamp zero.

    prova senza mktime....
    Codice PHP:
    <?php

    function compleanno($temp)
     {
      
    $temp explode("-",$temp);
      
    $oggi explode("-",date("Y-m-d"));
     
     if (
    $oggi[1] > $temp[1])
       return 
    $oggi[0] - $temp[0];
                  elseif (
    $oggi[1] >= $temp[1] && $oggi[2] >= $temp[2])
                  return 
    $oggi[0] - $temp[0];
                        else
                        return 
    $oggi[0] - $temp[0] - 1;
       }

    echo 
    compleanno("1960-02-21");

    ?>

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

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    109
    Scusami ma sei stato più veloce di me prima nel rispondere, comunque hai ragione è proprio legato a UNIX...

    Ho risolto buttando via la mia funzione e utilizzando quella del mitico piero.mac che ho trovato ravanando nel forum...

    http://forum.html.it/forum/showthrea...hreadid=689408

    Grazie lo stesso comunque

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    109
    Ecco piero ma oggi mi anticipate tutti?

    Comunque come ho appena detto ho usato la tua funzione riportata nella risposta precedente... ma se mi dici che questa è meglio la cambio al volo

    grazie

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.