Czas od daty - jaka to część roku

0

Mam konkretną datę - 25.04.2023 godz. 11:50:00 - i odmierzam od niej czas. Chcę, aby by strona pokazywała również jaka to część roku do czterech miejsc po przecinku, ale z uwzględnieniem lat przestępnych.

Oto kod

function ObliczanieCzasuOdDaty($rokOdDaty,$miesiacOdDaty,$dzienOdDaty,$godzinaOdDaty,$minutaOdDaty,$sekundaOdDaty)
{
	$miesiacOdDatyStara=(int)$miesiacOdDaty;
	switch($miesiacOdDaty) {
		case 1: $miesiacOdDaty="styczeń"; break;
		case 2: $miesiacOdDaty="luty"; break;
		case 3: $miesiacOdDaty="marzec"; break;
		case 4: $miesiacOdDaty="kwiecień"; break;
		case 5: $miesiacOdDaty="maj"; break;
		case 6: $miesiacOdDaty="czerwiec"; break;
		case 7: $miesiacOdDaty="lipiec"; break;
		case 8: $miesiacOdDaty="sierpień"; break;
		case 9: $miesiacOdDaty="wrzesień"; break;
		case 10: $miesiacOdDaty="październik"; break;
		case 11: $miesiacOdDaty="listopad"; break;
		case 12: $miesiacOdDaty="grudzień"; break;
	}
	$rokOdDatyStara=(int)$rokOdDaty;
	$dzienOdDatyStara=(int)$dzienOdDaty;
	$godzinaOdDatyStara=(int)$godzinaOdDaty;
	$minutaOdDatyStara=(int)$minutaOdDaty;
	$sekundaOdDatyStara=(int)$sekundaOdDaty;
	$timeStaraOdDaty=mktime($godzinaOdDatyStara,$minutaOdDatyStara,$sekundaOdDatyStara,$miesiacOdDatyStara,$dzienOdDatyStara,$rokOdDatyStara);
	$timeNowaOdDaty=time();
	$roznicaOdDaty=$timeNowaOdDaty-$timeStaraOdDaty;
	$dniOdDaty=floor($roznicaOdDaty/(60*60*24));
	$resztaOdDaty=$roznicaOdDaty-($dniOdDaty*60*60*24);
	$godzinOdDaty=floor($resztaOdDaty/(60*60));
	$resztaOdDaty-=($godzinOdDaty*60*60);
	$minutOdDaty=floor($resztaOdDaty/60);
	$sekundOdDaty=$resztaOdDaty-($minutOdDaty*60);
	if(date('Y')%4==0)
		$rok=366*24*60*60;
	else if(date('Y')%4==1)
		$rok=365.75*24*60*60;
	else if(date('Y')%4==2)
		$rok=365.5*24*60*60;
	else
		$rok=365.25*24*60*60;
	if($dniOdDaty>=0&&$godzinOdDaty>=0&&$minutOdDaty>=0&&$sekundOdDaty>=0)
	{
		echo "dnia $dzienOdDaty $miesiacOdDaty $rokOdDaty godz. $godzinaOdDaty:$minutaOdDaty:$sekundaOdDaty,<br/>czyli $dniOdDaty dni, $godzinOdDaty godzin, $minutOdDaty minut, $sekundOdDaty sekund, czyli ".round($roznicaOdDaty/$rok,4)." roku temu.";
	}
  }

i wywołanie

ObliczanieCzasuOdDaty(2023,4,25,11,50,"00");

Coś czuję, że jest źle - co mam poprawić?

1

Yyy... czyli coś takiego chcesz zrobić?

$diff = (new DateTime())->diff(new DateTime('25.04.2023 11:50:00'));
echo "$diff->y lat, $diff->m miesięcy, $diff->d dni, $diff->i minut, $diff->s sekund temu";
1 lat, 0 miesięcy, 1 dni, 32 minut, 13 sekund temu

1 użytkowników online, w tym zalogowanych: 0, gości: 1