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;
$SecondsInMinut e = 60;
$days = floor($diff /$SecondsInDay );
$hours = floor(($diff - $days *$SecondsInDay )/$SecondsInHour );
$mins = floor(($diff - $days *$SecondsInDay - $hours *$SecondsInHour )/
$SecondsInMinut e );
$secs = floor($diff - $days *$SecondsInDay - $hours *$SecondsInHour -
$mins *$SecondsInMinu te );
$result = "$days days $hours:$mins:$s ecs";
return $result;
}
$Year= $_GET['year'];
$Month= $_GET['month'];
$FirstTime = mktime(0,0,0,$M onth,1,$Year);
$LastTime = mktime(0,0,0,($ Month+1),1,$Yea r);
$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
$MonthDurationI nSeconds = $LastTime - $FirstTime;
$MonthDuration = duration($First Time, $LastTime);
echo "$MonthDuration InSeconds; $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
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;
$SecondsInMinut e = 60;
$days = floor($diff /$SecondsInDay );
$hours = floor(($diff - $days *$SecondsInDay )/$SecondsInHour );
$mins = floor(($diff - $days *$SecondsInDay - $hours *$SecondsInHour )/
$SecondsInMinut e );
$secs = floor($diff - $days *$SecondsInDay - $hours *$SecondsInHour -
$mins *$SecondsInMinu te );
$result = "$days days $hours:$mins:$s ecs";
return $result;
}
$Year= $_GET['year'];
$Month= $_GET['month'];
$FirstTime = mktime(0,0,0,$M onth,1,$Year);
$LastTime = mktime(0,0,0,($ Month+1),1,$Yea r);
$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
$MonthDurationI nSeconds = $LastTime - $FirstTime;
$MonthDuration = duration($First Time, $LastTime);
echo "$MonthDuration InSeconds; $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
Comment