Qui vi espongo una mia perplessità, nonché DateTime::diff da php 8.1.x. Voi cosa ne pensate?
php per le date o/e time adotta la convenzione GNU.
L'aritmetica non è 1 a 1, ma piuttosto per esempio +1 month dipende dal mese (se ad esempio 2021-01-01 +00:00, significa tra 31 giorni il che è 2021-03-03 +00:00) o next month che riporta al mese prossimo del giorno usato dalla data. da 2021-01-31 +00:00 a 2021-03-03 +00:00 (poiché il mese di gennaio in questione è 31 ma febbraio arriva a 28). Differente è la gestione della sintassi php 5.3 di first day of next month.
Questa premessa è per spiegare velocemente il concetto.
Da php 8.1.x è in considerazione il momento espresso non la conversione a UTC.
Codice PHP:
$date_start = new \DateTime('2021-03-01', new \DateTimeZone('Europe/Rome'));
$date_end = new \DateTime('2021-07-29', new \DateTimeZone('Europe/Rome'));
$interval = $date_start->diff($date_end);
print_r($interval);
/*Risultato atteso
DateInterval Object
(
[y] => 0
[m] => 4
[d] => 28
[h] => 0
[i] => 0
[s] => 0
[f] => 0
[weekday] => 0
[weekday_behavior] => 0
[first_last_day_of] => 0
[invert] => 0
[days] => 150
[special_type] => 0
[special_amount] => 0
[have_weekday_relative] => 0
[have_special_relative] => 0
)*/
mentre per me è errato pensarlo a 5 mesi (giustamente con la conversione a UTC).
Anche se effettivamente 4 mesi e 28 giorni esatti sono a 2021-7-29 01:00:00 Daylight Saving Time, ma va beh è tutt'altro discorso.