Navigazione

    Privacy - Termini e condizioni
    © 2020 Search On Media Group S.r.l.
    • Registrati
    • Accedi
    • CATEGORIES
    • Discussioni
    • Non letti
    • Recenti
    • Hashtags
    • Popolare
    • Utenti
    • Stream
    • Interest
    • Categories
    1. Home
    2. Categorie
    3. Coding e Sistemistica
    4. Coding
    5. Calcolare la differenza fra due date
    Questa discussione è stata cancellata. Solo gli utenti con diritti di gestione possono vederla.
    • M
      magicale User Attivo • ultima modifica di

      mktime() devi usarlo al posto di strtotime().

      La differenza corretta è:
      [php]
      $differenza=(time() - mktime(0,0,0,$str_giorno,$str_mese,$str_anno))/(31536000);
      [/php]

      Per avere solo gli anni interi puoi utilizzare la funzione intval()
      [php]
      $differenza=intval((time() - mktime(0,0,0,$str_giorno,$str_mese,$str_anno))/(31536000));
      [/php]

      o forzare il risultato ad un intero con l'operatore di type casting (int)
      [php]
      $differenza=(int)(time() - mktime(0,0,0,$str_giorno,$str_mese,$str_anno))/(31536000);
      [/php]

      oppure arrotondare per difetto con la funzione matematica floor();
      (in questo caso il risultato sarà ancora di tipo float)
      [php]
      $differenza=floor((time() - mktime(0,0,0,$str_giorno,$str_mese,$str_anno))/(31536000));
      [/php]

      La migliore è la prima soluzione

      Alessandro

      0 Miglior Risposta Ringrazia Cita Rispondi

        1 Risposta Ultima Risposta
      • C
        carlitos1982 User Attivo • ultima modifica di

        OK,ho usato questa soluzione
        [PHP]
        $differenza=intval((time() - mktime(0,0,0,$str_giorno,$str_mese,$str_anno))/(31536000));
        [/PHP]
        mi da 24 come risultato...invece dovrebbe essere 26...eppure i dati che mi ricavo sono corretti....ho controllato
        $str_giorno=30
        $str_mese=03
        $str_anno=1982

        0 Miglior Risposta Ringrazia Cita Rispondi

          1 Risposta Ultima Risposta
        • M
          magicale User Attivo • ultima modifica di

          Hai ragione... colpa mia che nella fretta ho messo i dati secondo l'ordine "europeo", mentre i parametri di mktime sono
          (ore, minuti, secondi, mese, giorno, anno),
          secondo la scrittura "americana" che segue il formato mm-gg-yyyy

          [PHP]
          $differenza=intval((time() - mktime(0,0,0,$str_mese,$str_giorno,$str_anno))/(31536000));
          [/PHP]

          Alessandro

          0 Miglior Risposta Ringrazia Cita Rispondi

            1 Risposta Ultima Risposta
          • C
            carlitos1982 User Attivo • ultima modifica di

            Grazie mille,ora funziona benissimo;)

            0 Miglior Risposta Ringrazia Cita Rispondi

              1 Risposta Ultima Risposta
            • C
              carlitos1982 User Attivo • ultima modifica di

              Sorge un problemino,oggi 23 marzo nell èta dell utente mi segna già 27,l utente compie i 27 anni il 30 marzo...io vorrei che 27 me lo segnasse appunto il giorno del compleanno...e non prima:?credo sia dovuto alla funzione intval il problemino che cerca comunque di dare un valore intero al risultato ma non ne sarei sicuro visto che togliendo intval alla stringa mi da come risultato 27.0004106418 eppure la data di nascita dell utente è 30-03-1982 ....come potrei risolvere la cosa?

              0 Miglior Risposta Ringrazia Cita Rispondi

                1 Risposta Ultima Risposta
              • M
                magicale User Attivo • ultima modifica di

                Ciao,
                il problema non è dovuto ad intval, ma agli anni bisestili per i quali non vale la corrispondenza:

                1 anno = 31536000 secondi

                Alessandro

                0 Miglior Risposta Ringrazia Cita Rispondi

                  1 Risposta Ultima Risposta
                • C
                  carlitos1982 User Attivo • ultima modifica di

                  Quindi non c'è modo di risolvere...giusto?

                  0 Miglior Risposta Ringrazia Cita Rispondi

                    1 Risposta Ultima Risposta
                  • M
                    magicale User Attivo • ultima modifica di

                    C'è sempre un modo di risolvere:
                    [PHP]
                    $eta = date("Y",time())-$str_anno-(date("md",time())<($str_mese.$str_giorno));
                    [/PHP]

                    Alessandro

                    0 Miglior Risposta Ringrazia Cita Rispondi

                      1 Risposta Ultima Risposta
                    • C
                      carlitos1982 User Attivo • ultima modifica di

                      Grazie!
                      Sei un mito;)

                      0 Miglior Risposta Ringrazia Cita Rispondi

                        1 Risposta Ultima Risposta
                      • C
                        carlitos1982 User Attivo • ultima modifica di

                        Ciao Magicale,
                        ho notato questo problema....praticamente ho un utente come data di
                        nascita uguale a 23 04 1971...perchè nel calcolo degli anni mi da un -1 invece dell ètà esatta dell utente?

                        0 Miglior Risposta Ringrazia Cita Rispondi

                          1 Risposta Ultima Risposta
                        • M
                          magicale User Attivo • ultima modifica di

                          Ciao,
                          se provi così:
                          [PHP]
                          $str_giorno="23";
                          $str_mese="04";
                          $str_anno="1971";
                          $eta = date("Y",time())-$str_anno-(date("md",time())<($str_mese.$str_giorno));
                          [/PHP]
                          Il risultato viene corretto. L'errore potrebbe essere nei dati, verifica che siano recuperati correttamente.

                          Alessandro

                          0 Miglior Risposta Ringrazia Cita Rispondi

                            1 Risposta Ultima Risposta
                          Caricamento altri post
                          Rispondi
                          • Topic risposta
                          Effettua l'accesso per rispondere
                          • Da Vecchi a Nuovi
                          • Da Nuovi a Vecchi
                          • Più Voti