Ciao!
La tua soluzione è perfetta. Però solamente per date che abbiano il time stamp! Prima del 70 "strToTime" restituisce sempre "-1"...
Come si fa?
Io ho dovuto costruire una funzione piuttosto complessa... Praticamente come prima cosa controllo se le 2 date hanno timestamp. In questo caso è facile e si fa come hai detto tu oppure con la differenza di timestamp.
Nel caso non ci siano a disposizione i ts la cosa diventa un casino...
Posto qui un mio pezzo di codice. E' abbastanza lungo e utilizza funzioni esterne il cui nome da comunque un'idea precisa di cosa fanno:
codice:
} else {
# In questo caso non è disponibile il timeStamp per almeno una delle due date. #
# E' necessario procedere al calcolo manuale dell'intervallo. #
$ss = 0;
if ( $ds->anno == $de->anno ) {
# L'intervallo è compreso in un'unico anno. #
if ( $ds->mese == $de->mese ) {
# L'intervallo è compreso in uno stesso mese. #
if ( $ds->giorno == $de->giorno ) {
# L'intervallo è compreso in uno stesso giorno. #
if ( $ds->ora == $de->ora ) {
# L'intervallo è compreso nella stessa ora. #
if ( $ds->minuto == $de->minuto ) {
# L'intervallo è di soli secondi. Calcolo diretto. #
$ss = $de->secondo - $ds->secondo;
} else {
# L'intervallo è posto tra un minuto e l'altro. Devo calcolare#
# il numero di secondi al termine del minuto per la prima data#
# e il numero di secondi dall'inizio del minuto per la seconda#
$ss = $ds->secTo60() + $de->secondo;
}
} else {
# L'intervallo è posto in ore differenti. Devo calcolare il numero#
# di secondi necessari a completare l'ora della data di partenza e#
# il numeri di secondo trascorsi dalla data di arrivo. #
$ss = $ds->secToHour() + $de->secFromHour();
}
} else {
# L'intervallo è compreso in giorni diversi dello stesso mese. Devo #
# calcolare il numero di secondi necessari a completare il giorno, il #
# numero di giorni dell'intervallo ed il numero di secondi passati #
# dall'inizio del giorno per la seconda data. #
$ss = $ds->secToDay() + ( $de->giorno - ( $ds->giorno + 1 ) ) * 86400 + $de->secFromDay();
}
} else {
# L'intervallo è esteso su mesi differenti. In questo caso è necessario #
# calcolare il numero di secondi necessari allo scadere del mese per la #
# prima data, il numero di secondi passati dall'inizio del mese per la #
# seconda ed il numero di secondi di intervallo dei mesi in mezzo. #
$ss = $ds->secToMonth() + $de->secFromMonth();
# Ok, resta da calcolare l'intervallo dei mesi. #
for ( $i = $ds->mese+1; $i < $de->mese; $i++ ) {
$ss += xDataTs_monthSec($i, $this->anno);
}
}
} else {
# L'intervallo è esteso a più anni. Qui la faccenda si complica di brutto. #
# Come prima cosa è necessario calcolare quanti secondi mancano all'anno. #
$ss = $ds->secToYear();
# Come seconda cosa è necessario calcolare quanti secondi sono passati #
# dall'inizio dell'anno della seconda data. #
$ss += $de->secFromYear();
# Ora è necessario calcolare il numero di secondi degli anni in mezzo! #
for ( $i = $ds->anno+1; $i<$de->anno; $i++ ) $ss += xDataTs_yearSec($i);
$ss-=3600; // Non so perchè ma il calcolo aggiunge un'ora :-) #################
}
} // Fine calcolo intervallo in secondi. #
da notare che "$ds" = obj DataStart e "$de" = obj DataEnd.
Questo è una porzione di un metodo di un oggetto mio.... Ancora da testare e provare... Comunque dovrebbe fornire un calcolo abbastanza preciso in caso di assenza da time stamp.
Ciao!