Quote:
Hi!
>
I'm writing a script that would sort some events and calculate the sum
of them all in the end of the month, which should be equal to the
number of days in a month. It seems to be working well, but for some
reason on march it calculates one hour less (30 days and 23:00:00) and
in october one hour more (31 days 1:00:00). I've tried different years
not just 2007. It's all the same. Anyone knows a good reason why this
might happen as it works like a charm for other months. Please help me
solve this, as I really dont like the solution to add another hour to
March and subtract one from October...
>
Here are some relavant parts of the code (I've translated it, so there
might be some old variable namse in there):
>
function duration($Time1, $Time2)
{
>
$diff = $Time2 - $Time1;
>
$SecondsInDay = 86400;
$SecondsInHour = 3600;
$SecondsInMinute = 60;
>
$days = floor($diff /$SecondsInDay );
$hours = floor(($diff - $days *$SecondsInDay )/$SecondsInHour );
$mins = floor(($diff - $days *$SecondsInDay - $hours *$SecondsInHour )/
$SecondsInMinute );
$secs = floor($diff - $days *$SecondsInDay - $hours *$SecondsInHour -
$mins *$SecondsInMinute );
>
>
$result = "$days days $hours:$mins:$secs";
>
return $result;
>
}
>
>
$Year= $_GET['year'];
$Month= $_GET['month'];
>
$FirstTime = mktime(0,0,0,$Month,1,$Year);
$LastTime = mktime(0,0,0,($Month+1),1,$Year);
>
$FirstDate = date("d.m.Y H:i:s", $FirstTime);
$LastDate = date("d.m.Y H:i:s", $LastTime);
>
echo "$FirstDate - $LastDate";
//these shows like it should for all months:
//Jan: 01.01.2007 00:00:00 - 01.02.2007 00:00:00
//Feb: 01.02.2007 00:00:00 - 01.03.2007 00:00:00
//March: 01.03.2007 00:00:00 - 01.04.2007 00:00:00
//April: 01.04.2007 00:00:00 - 01.05.2007 00:00:00
//May: 01.05.2007 00:00:00 - 01.06.2007 00:00:00
//...
//October: 01.10.2007 00:00:00 - 01.11.2007 00:00:00
>
$MonthDurationInSeconds = $LastTime - $FirstTime;
$MonthDuration = duration($FirstTime, $LastTime);
>
echo "$MonthDurationInSeconds; $MonthDuration";
//for two months of same length this above is different and I cant
figure out why...
//Jan: 2678400, 31 days 00:00:00
//Feb: 2419200, 28 days 00:00:00
//March: 2674800, 30 days 23:00:00
//April: 2592000, 30 days 00:00:00
//May: 2678400, 31 days 00:00:00
//...
//October: 2682000, 31 days 01:00:00
>
savings time.
JDS Computer Training Corp.