month duration problem 
July 1st, 2008, 08:45 AM
| | | |
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 | 
July 1st, 2008, 08:45 AM
| | | | re: month duration problem Lado.Leskovec@gmail.com wrote: Quote:
[...] 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).
| Why not use something like this?
$days_in_month =
date( 't' , mktime(0,0,0,$Month,1,$Year) );
$MonthDurationInSeconds = $days_in_month * 24 * 3600;
Cheers,
--
----------------------------------
Iván Sánchez Ortega -ivansanchez-algarroba-escomposlinux-punto-org-
Un ordenador no es un televisor ni un microondas, es una herramienta
compleja. | 
July 1st, 2008, 09:05 AM
| | | | re: month duration problem
Thanks :) It worked.
Regards,
Lado | 
July 1st, 2008, 11:55 AM
| | | | re: month duration problem Lado.Leskovec@gmail.com wrote: 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
>
| But March is one hour short, and October one hour long due to daylight
savings time.
--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp. jstucklex@attglobal.net
================== | 
July 2nd, 2008, 06:15 AM
| | | | re: month duration problem
On Jul 1, 12:37 am, Lado.Lesko...@gmail.com wrote: Quote:
>
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).
| Which is correct, because of daylight saving time. In March, clocks
are
moved one hour ahead, so you lose an hour. In October, clocks are set
one
hour back, so you gain an hour. Quote: |
Please help me solve this,
| You might recall that date('t', $timestamp) returns the number of
days
in the month into which the $timestamp falls. You can then use that
number to compute the month's duration in seconds.
Cheers,
NC | 
July 8th, 2008, 12:35 PM
| | | | re: month duration problem
I had to do some changes to my script to include longer-than-month
periods, so I had to use the first solution again. This brought up the
same problem again, but after thinking about what you guys said, I
realised it's actually better this way.
Thanks! |  | | | | /bytes/about
We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights.
Get the best answers to your questions from over 225,662 network members.
|