Intendo dire che l'intervallo non è proprio come lo mostri nel tuo output ma bensì dal 16 al 15 poi dal 16 al 16 e poi ancora dal 16 al 16, non è rilevante se il do-while è con il periodo incluso.
Se vuoi inizio e fine come mostrato qui
L'output corretto è :
dal 16/11/2020 al 15/11/21
dal 16/11/2021 al 15/11/22
dal 16/11/2022 al 15/11/23
Il tuo codice prevede il 15 solo alla prima iterazione altrimenti usa solo +1 year.
Mentre se vuoi:
L'output corretto è (il codice attuale) :
dal 16/11/2020 al 15/11/21
dal 16/11/2021 al 16/11/22
dal 16/11/2022 al 16/11/23
Codice PHP:
<?php
date_default_timezone_set('UTC');
$datainizio = '2020-11-17';
$i = 0;
// $datainizio è la data iniziale del contratto
$dataOggi = date("Y-m-d");
$periodoi = $datainizio;
$periodof = strtotime ('+1 year' , strtotime ($periodoi));
$periodof = date ( 'Y-m-d' , $periodof );
$periodof = strtotime ( '-1 day' , strtotime ($periodof));
$periodof = date ( 'Y-m-d' , $periodof );
if (!(($dataOggi >= $periodoi)&&($dataOggi <= $periodof))){
do {
$arr[$i] = array($periodoi, $periodof);
$i++;
$periodoi = strtotime ('+1 year' , strtotime ($periodoi));
$periodoi = date ( 'Y-m-d' , $periodoi );
$periodof = strtotime ('+1 year' , strtotime ($periodoi));
$periodof = date ( 'Y-m-d' , $periodof );
} while (($dataOggi >= $periodoi)&&($dataOggi <= $periodof));
var_dump($arr);
}
?>