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!