Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery

Re: code to get the date for "next Thursday"

by Albannach (Prior)
on Mar 20, 2006 at 21:08 UTC ( #538048=note: print w/replies, xml ) Need Help??

in reply to code to get the date for "next Thursday"

Again it might not be any faster, but it is useful to note that ParseDate is smarter than you think:

Use Date::Manip; print UnixDate(ParseDate('next thursday'),'%A %e %b %Y'),"\n";

gives Thursday 23 Mar 2006

Update: Here's a method using the usually-faster Date::Calc and a benchmark of some of the offerings... any guesses as to why Date::Manip is soooo slow? (1.7GHz P4 Win2k, 256MB RAM)

Rate Manip bfdi ikegami Calc Manip 216/s -- -7% -99% -100% bfdi 231/s 7% -- -99% -100% ikegami 29540/s 13596% 12701% -- -65% Calc 84063/s 38874% 36327% 185% --

Code follows:

use strict; use warnings; use Benchmark qw(cmpthese); use Date::Manip; use Date::Calc qw(Today Day_of_Week Add_Delta_Days); Date_Init('TZ=EDT'); # for ikegami use POSIX qw( strftime ); use Time::Local qw( timegm_nocheck ); sub ikegami { my ($day, $mon, $year, $wday) = (localtime())[3..6]; # Defaults to +now. $year += 1900; $day += (7 - $wday + 4) % 7; my $next_th = timegm_nocheck(0,0,0,$day,$mon,$year); # fixed, was $m +day rather than $day return strftime('%Y-%m-%d', gmtime($next_th)); } sub bfdi533 { my $today_dt = &ParseDate("today"); my $new_dt = &Date_GetNext($today_dt, 'Thu', 1); my $date = &UnixDate($new_dt, "%Y-%m-%d"); } sub Manip { return UnixDate(ParseDate('next thursday'),'%Y-%m-%e'); } sub Calc { my($year,$month,$day) = Today(); my $nextday = 4; # Thursday my $dow = Day_of_Week($year,$month,$day); my $delta = (7 + $nextday - $dow) % 7; my ($y,$m,$d) = Add_Delta_Days($year, $month, $day, $delta); return sprintf('%4i-%02i-%02i', $y, $m, $d); } cmpthese(-3, { bfdi => \&bfdi533, ikegami => \&ikegami, Manip => \&Manip, Calc => \&Calc, } );

I'd like to be able to assign to an luser

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://538048]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (4)
As of 2017-10-24 04:47 GMT
Find Nodes?
    Voting Booth?
    My fridge is mostly full of:

    Results (286 votes). Check out past polls.