Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di carlo2002
    Registrato dal
    Jun 2002
    Messaggi
    2,746

    quanti mesi tra due date?

    Come potrei procedere per calcolare la quantità di mesi che intercorrono tra due date ?
    Errare humanum est, perseverare ovest

  2. #2
    Per esempio:
    Codice PHP:
    <?php
    $a 
    = new DateTime('2011-11-18');
    $b = new DateTime('2010-10-20');

    $mesi round(($a->getTimestamp() - $b->getTimestamp()) / (60 60 24 30));
    var_dump($mesi);

    ?>

  3. #3
    Utente di HTML.it L'avatar di carlo2002
    Registrato dal
    Jun 2002
    Messaggi
    2,746
    Wow, elegante

    Grazie, ma facendo così un confronto tra i timestamp non è forse approssimativa calcolando tutti i mesi di 30 giorni?

    Ho provato su cinquanta anni ed invece di 600 mesi me ne da 364
    Errare humanum est, perseverare ovest

  4. #4
    Utente di HTML.it L'avatar di carlo2002
    Registrato dal
    Jun 2002
    Messaggi
    2,746
    Intanto ho confezionato una funzioncina, è un po' grezza ma funziona

    Le date vanno passate nel formato iso 8601 ( aaa-mm-gg)

    Codice PHP:
    function mesi_intercorrenti($data1,$data2) {
    $mesi_intercorrenti ;

    if ( 
    str_replace('-','',$data1) > str_replace('-','',$data2) ) {
    $data_recente $data1 ;
    $data_antica  $data2 ;
    } else {
    $data_recente $data2 ;
    $data_antica  $data1 ;
    }

    list(
    $anno_recente,$mese_recente,$giorno_recente) = explode('-',$data_recente) ;
    list(
    $anno_antico,$mese_antico,$giorno_antico)    = explode('-',$data_antica) ;

    if ( 
    $anno_recente.$mese_recente != $anno_antico.$mese_antico &&
         
    checkdate($mese_recente,$giorno_recente,$anno_recente) &&
         
    checkdate($mese_antico,$giorno_antico,$anno_antico) ) {
    if ( 
    $anno_recente == $anno_antico )     $mesi_intercorrenti $mese_recente $mese_antico ;
    if ( 
    $anno_recente $anno_antico == $mesi_intercorrenti $mese_recente $mese_antico 13 ;
    if ( 
    $anno_recente $anno_antico )  $mesi_intercorrenti $mese_recente $mese_antico 13 + ( ( $anno_recente $anno_antico ) * 12 ) ;
    }

    return (
    $mesi_intercorrenti) ;

    Errare humanum est, perseverare ovest

  5. #5

    Re: quanti mesi tra due date?

    Originariamente inviato da carlo2002
    Come potrei procedere per calcolare la quantità di mesi che intercorrono tra due date ?
    period_diff()

    http://dev.mysql.com/doc/refman/5.5/...on_period-diff

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

  6. #6
    Utente di HTML.it L'avatar di carlo2002
    Registrato dal
    Jun 2002
    Messaggi
    2,746

    Re: Re: quanti mesi tra due date?

    Originariamente inviato da piero.mac
    period_diff()

    http://dev.mysql.com/doc/refman/5.5/...on_period-diff
    no no no

    mi ero anche riletto le tue pillole date/time e non me n'ero accorto che c'era

    però non usa un fromato date valido, come si fa a fare una select sui campi date ?

    Grazie
    Errare humanum est, perseverare ovest

  7. #7

    Re: Re: Re: quanti mesi tra due date?

    Originariamente inviato da carlo2002
    no no no

    mi ero anche riletto le tue pillole date/time e non me n'ero accorto che c'era

    però non usa un fromato date valido, come si fa a fare una select sui campi date ?

    Grazie
    codice:
    select period_diff(EXTRACT(YEAR_MONTH FROM campo_da), EXTRACT(YEAR_MONTH FROM campo_a)) as oh_quanti_mesi
    from tabella

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

  8. #8
    Utente di HTML.it L'avatar di carlo2002
    Registrato dal
    Jun 2002
    Messaggi
    2,746
    Super

    sempre risolutivo

    Grazie mille
    Errare humanum est, perseverare ovest

  9. #9
    Utente di HTML.it L'avatar di carlo2002
    Registrato dal
    Jun 2002
    Messaggi
    2,746
    Piero scusa se ne approfitto, ma ancora non sto quadrando il cerchio...

    in pratica dovrei controllare i mesi che intercorrono tra due date, la più antica e la più recente all'interno della stessa tabella

    io per trovare queste due date uso

    codice:
    SELECT campo_data FROM tabella_date ORDER BY campo_data DESC LIMIT 1
    
    e
    
    SELECT campo_data FROM tabella_date ORDER BY campo_data ASC LIMIT 1
    quindi per ottenere il risultato devo fare sempre tre query

    come si potrebbe riunire tutto in un'unica query?
    Errare humanum est, perseverare ovest

  10. #10
    usa MAX() e MIN()

    codice:
    select period_diff(EXTRACT(YEAR_MONTH FROM MAX(campo_data)), 
                       EXTRACT(YEAR_MONTH FROM MIN(campo_data))) as oh_che_bello
    from tabella

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