in reply to GD::graph time-scale option?

There's definitely no automatic way to do it. But it seems simple enough to write a little gap filler.

use Date::Manip; use POSIX; @data = ([20070410, 20070415, 20070417], [ 10, 20, 15 ]); for my $i (0 .. $#{$data[0]}-1) { my $lhs = &UnixDate(&ParseDate($data[0][$i]), '%s'); my $rhs = &UnixDate(&ParseDate($data[0][$i+1]), '%s'); my @gap = (); REDO: { if( $lhs < $rhs ) { $lhs += 86400; push @gap, strftime('%Y%m%d', $lhs); redo REDO; } } # I'm not 100% on these splices, be sure to use your brain # untested, etc etc splice @{$data[0]}, $i+1, 0, @gap; splice @{$data[1]}, $i+1, 0, map {0} @gap; }

UPDATE: Although I believe this would work correctly for the first gap, it definitely wouldn't for the next as the $#{$data[0]} would change dramatically after filling the first gap and the for loop would be unaware of it...

-Paul

Replies are listed 'Best First'.
Re^2: GD::graph time-scale option?
by GertMT (Hermit) on May 09, 2007 at 11:57 UTC
    Thanks, for pointing me in a direction I understand. It'll take me some time to work it out. Good challenge though.
Re^2: GD::graph time-scale option?
by GertMT (Hermit) on May 10, 2007 at 08:32 UTC
    hi,
    guess I'd like to make a _new_ list of all dates occuring between start_date and end_date. Subsequently mix the two lists (one with the initial data and the new one) and do some filtering to get rid of the double occurences and put 'undef' where there is no data/value.
    I'll be posting the final script if I've done what I describe above but in the meantime I'm trying to find out the following:

    What is the best way to get an array with dates between start_date and end_date while using date::manip?

    thanks,
    Gert
      What is the best way to get an array with dates between start_date and end_date while using date::manip?

      Something like the following might be what you want:
      #!/usr/bin/perl use strict; use warnings; use Date::Manip; my @dates = ParseRecur( '0:0:0:1:0:0:0', # every day '100 days ago', # base before start_date 'last Monday', # start_date 'next Friday' ); # end_date foreach my $date ( @dates ) { print "$date\n"; }
      Hth
        Thanks!
        just came up with something like:
        my $start = '01/01/2006'; my $end= '01/21/2006' ; my @days = ParseRecur("0:0:0:1:0:0:0", $start,$start,$end); print "@days\n";
        Just can't get the formatting right.

        How to limit the output to something like yyyymmdd?
        It'l be with something like %Y%m%d. But where do I put this. It'll be very obvious sorry to ask. If I've got this I can get the finish.
        Gert