Help | Site Map
Connecting Tech Pros Worldwide
 
 
LinkBack Thread Tools
  #1  
Old July 1st, 2008, 08:45 AM
Lado.Leskovec@gmail.com
Guest
 
Posts: n/a
Default month duration problem

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
  #2  
Old July 1st, 2008, 08:45 AM
=?UTF-8?B?SXbDoW4gU8OhbmNoZXogT3J0ZWdh?=
Guest
 
Posts: n/a
Default 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.
  #3  
Old July 1st, 2008, 09:05 AM
Lado.Leskovec@gmail.com
Guest
 
Posts: n/a
Default Re: month duration problem

Thanks :) It worked.

Regards,
Lado
  #4  
Old July 1st, 2008, 11:55 AM
Jerry Stuckle
Guest
 
Posts: n/a
Default 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
==================

  #5  
Old July 2nd, 2008, 06:15 AM
NC
Guest
 
Posts: n/a
Default 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
  #6  
Old July 8th, 2008, 12:35 PM
Lado.Leskovec@gmail.com
Guest
 
Posts: n/a
Default 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!
 

Bookmarks


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are Off
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On

What is Bytes?

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 network members.
Post your question now . . .
It's fast and it's free

Popular Articles