in reply to Add A Number of Days to Today's Date

$days = 10; $then = localtime ( time() + $days * 24*60*60 ); print $then;

cheers

tachyon

s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print

Replies are listed 'Best First'.
Re: Re: Add A Number of Days to Today's Date
by I0 (Priest) on Sep 29, 2001 at 03:33 UTC
    Except when the day is 23 or 25 hours long.
Re: Re: Add A Number of Days to Today's Date
by cfreak (Chaplain) on Sep 28, 2001 at 23:33 UTC
    Probably not noticable but it is slightly faster to do
    $days = 10; $then = localtime(time() + $days * 86400); print $then;
      * 24 * 60 *60

      slightly faster to do ... * 86400

      No, any good optimizer should optimize away those multiplications (in any language) anyway (so if its done in a loop it shouldn't matter, and if its only done once then it makes too little difference to matter), and its better self-documentation IMHO to leave it as '24*60*60' because those numbers mean something to me, whereas 86400 does not. Someone could inadvertently change it to 84600 and I wouldn't notice the difference until many wrong calculations had been done. In any case, this is a bad place for micro-optimizations...

      It makes it obvious what is meant and makes no significant difference to speed whatsoever:

      use Benchmark; $yours = ' $days = 10; $then = localtime(time() + $days * 86400);'; $mine = ' $days = 10; $then = localtime(time() + $days * 24*60*60 );'; timethese ( 100000, { 'yours' => $yours, 'mine' => $mine } ); __END__ Benchmark: timing 100000 iterations of mine, yours... mine: 30 wallclock secs (29.95 usr + 0.00 sys = 29.95 CPU) @ 33 +38.89/s (n=100000) yours: 30 wallclock secs (29.94 usr + 0.00 sys = 29.94 CPU) @ 33 +40.01/s (n=100000)

      sleep 28800 :-) cheers

      tachyon

      s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print

        It makes a bit more difference if you factor in compile time (more tokens to parse, and no optimization of multiplying constants, don't ask me which makes more of a difference):
        use strict; use warnings; use Benchmark; my $x = 5; timethese(-5, { EXPANDED=>sub { eval '$x * 24 * 60 * 60' }, NOT_EXP =>sub { eval '$x * 86400' }, }); Benchmark: running EXPANDED, NOT_EXP, each for at least 5 CPU seconds. +.. EXPANDED: 6 wallclock secs ( 5.31 usr + 0.00 sys = 5.31 CPU) @ 56 +77.40/s (n =30147) NOT_EXP: 6 wallclock secs ( 5.26 usr + 0.00 sys = 5.26 CPU) @ 67 +49.24/s (n =35501)
        But of course I'd leave in the explicit multiplications anyway for reasons already mentioned. If I really needed to eval that, I might put something like $seconds_per_day = 24 * 60 * 60; outside of the eval, then use the variable inside.