strtotime() not able to handle 04/29 correctly??? [message #177220] |
Wed, 29 February 2012 18:41 |
cerr
Messages: 33 Registered: September 2010
Karma: 0
|
Member |
|
|
Hi,
I calculate the amount of days between two dates like this:
$start = strtotime($_SESSION['sdate']);
$end = strtotime($_SESSION['hdate']);
echo ($end - $start);
$duration = ($end - $start) / 3600 /24;
$duration+=1; //plus one day
echo " The ad will show for ".$duration." day(s)<br/>";
Which generally works fine but things seem to mess up when I have a
start sdate of 2012-02-29 and an hdate of 2012-04-01. I get a duration
of: 32.9583333333
Why is this? That's messing up my calculations. Is there a better way
to do this?
Thanks!
Ron
|
|
|
Re: strtotime() not able to handle 04/29 correctly??? [message #177221 is a reply to message #177220] |
Wed, 29 February 2012 20:19 |
Peter H. Coffin
Messages: 245 Registered: September 2010
Karma: 0
|
Senior Member |
|
|
On Wed, 29 Feb 2012 10:41:34 -0800 (PST), cerr wrote:
> Hi,
>
> I calculate the amount of days between two dates like this:
>
> $start = strtotime($_SESSION['sdate']);
> $end = strtotime($_SESSION['hdate']);
> echo ($end - $start);
> $duration = ($end - $start) / 3600 /24;
> $duration+=1; //plus one day
> echo " The ad will show for ".$duration." day(s)<br/>";
>
> Which generally works fine but things seem to mess up when I have a
> start sdate of 2012-02-29 and an hdate of 2012-04-01. I get a duration
> of: 32.9583333333
> Why is this? That's messing up my calculations. Is there a better way
> to do this?
"Note:
Using this function for mathematical operations is not advisable. It is
better to use DateTime::add() and DateTime::sub() in PHP 5.3 and later,
or DateTime::modify() in PHP 5.2."
Be that as it may...
What result are you expecting? 2012-02-29 to 2012-04-01 is 32 days isn't
it? Plus the 1 you're adding for no obvious reason would be 33, and
rounding the result you *did* get comes out 33..
--
"The last refuge of the insomniac is a sense of superiority to the
sleeping world."
--Leonard Cohen, The Favourite Game
|
|
|
Re: strtotime() not able to handle 04/29 correctly??? [message #177222 is a reply to message #177220] |
Wed, 29 February 2012 21:21 |
Jerry Stuckle
Messages: 2598 Registered: September 2010
Karma: 0
|
Senior Member |
|
|
On 2/29/2012 1:41 PM, cerr wrote:
> Hi,
>
> I calculate the amount of days between two dates like this:
>
> $start = strtotime($_SESSION['sdate']);
> $end = strtotime($_SESSION['hdate']);
> echo ($end - $start);
> $duration = ($end - $start) / 3600 /24;
> $duration+=1; //plus one day
> echo " The ad will show for ".$duration." day(s)<br/>";
>
> Which generally works fine but things seem to mess up when I have a
> start sdate of 2012-02-29 and an hdate of 2012-04-01. I get a duration
> of: 32.9583333333
> Why is this? That's messing up my calculations. Is there a better way
> to do this?
>
> Thanks!
> Ron
Daylight savings time.
--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex(at)attglobal(dot)net
==================
|
|
|
Re: strtotime() not able to handle 04/29 correctly??? [message #177223 is a reply to message #177220] |
Wed, 29 February 2012 23:24 |
Doug Miller
Messages: 171 Registered: August 2011
Karma: 0
|
Senior Member |
|
|
cerr <ron(dot)eggler(at)gmail(dot)com> wrote in news:a63a7827-bc1a-483a-96ae-de8289aa2de0@
32g2000yqn.googlegroups.com:
> Hi,
>
> I calculate the amount of days between two dates like this:
>
> $start = strtotime($_SESSION['sdate']);
> $end = strtotime($_SESSION['hdate']);
> echo ($end - $start);
> $duration = ($end - $start) / 3600 /24;
> $duration+=1; //plus one day
> echo " The ad will show for ".$duration." day(s)<br/>";
>
> Which generally works fine but things seem to mess up when I have a
> start sdate of 2012-02-29 and an hdate of 2012-04-01. I get a duration
> of: 32.9583333333
which is 32 days 23 hours. What might throw this off by one hour? Hint: in the United States, it
happens every year on the second Sunday of March.
|
|
|
|
|
Re: strtotime() not able to handle 04/29 correctly??? [message #177226 is a reply to message #177224] |
Thu, 01 March 2012 01:28 |
Doug Miller
Messages: 171 Registered: August 2011
Karma: 0
|
Senior Member |
|
|
Eli the Bearded <*@eli.users.panix.com> wrote in news:eli$1202291918(at)qz(dot)little-
neck.ny.us:
> In comp.lang.php, Doug Miller <doug_at_milmac_dot_com(at)example(dot)com> wrote:
>> which is 32 days 23 hours. What might throw this off by one hour? Hint:
>> in the United States, it happens every year on the second Sunday of March.
>
> For some values of "every year"
Oh, really? You think the DST transition occurs only some years, and not others?
> and in some regions only. Arizona is unaffected.
Correct. Hawaii also.
> Parts of Indiana, too.
Incorrect. All of Indiana observes DST.
> Years before 2007 don't have the
> second Sunday of March significant at all.
Years before 2007 were not part of the OP's date range and thus are not relevant to this
discussion.
|
|
|