Matthew wrote:
>  To me, this seems amazingly inefficient. If my weekly recurring 
>original event start date was Aug 1, 2006, the perl would have to loop 
>26 times to find the next event (in this case, Jan 23).
>
>Can anyone offer a better solution to this?

Yes: determine the day-of-week of the original event, and the week
containing tomorrow, then put them together.  With my Date::ISO8601
module this looks like:

        use Date::ISO8601 qw(ymd_to_cjdn cjdn_to_ywd ywd_to_cjdn present_ymd);

        my $today_cjdn = ymd_to_cjdn(2007,1,16);
        my $initial_cjdn = ymd_to_cjdn(2006,8,1);

        (undef, undef, my $repeat_dow) = cjdn_to_ywd($initial_cjdn);
        my($next_y, $next_w, $today_dow) = cjdn_to_ywd($today_cjdn + 1);
        if($today_dow > $repeat_dow) {
                ($next_y, $next_w, undef) = cjdn_to_ywd($today_cjdn + 8);
        }

        print present_ymd(ywd_to_cjdn($next_y, $next_w, $repeat_dow)), "\n";

I expect the same algorithm can be implemented using DateTime, but I'm
not a regular user of that, sorry.

-zefram

Reply via email to