Come potrei procedere per calcolare la quantità di mesi che intercorrono tra due date ?![]()
Come potrei procedere per calcolare la quantità di mesi che intercorrono tra due date ?![]()
Errare humanum est, perseverare ovest
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);
?>
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
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 = 0 ;
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 + 1 ;
if ( $anno_recente - $anno_antico == 1 ) $mesi_intercorrenti = $mese_recente - $mese_antico + 13 ;
if ( $anno_recente - $anno_antico > 1 ) $mesi_intercorrenti = $mese_recente - $mese_antico + 13 + ( ( $anno_recente - $anno_antico - 1 ) * 12 ) ;
}
return ($mesi_intercorrenti) ;
}
Errare humanum est, perseverare ovest
period_diff()Originariamente inviato da carlo2002
Come potrei procedere per calcolare la quantità di mesi che intercorrono tra due date ?![]()
http://dev.mysql.com/doc/refman/5.5/...on_period-diff
Il silenzio è spesso la cosa migliore. Pensa ... è gratis.
no no noOriginariamente inviato da piero.mac
period_diff()
http://dev.mysql.com/doc/refman/5.5/...on_period-diff![]()
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
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.
Super![]()
sempre risolutivo![]()
Grazie mille![]()
Errare humanum est, perseverare ovest
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
quindi per ottenere il risultato devo fare sempre tre querycodice: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
come si potrebbe riunire tutto in un'unica query?
Errare humanum est, perseverare ovest
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.