http://qs321.pair.com?node_id=1025658


in reply to Display tide based on time now.

This code will find the latest tide info before current time. Disclaimer: I cannot test the code as some missing modules resist installation on my box now.

my $last_time = 0; my $current_tide = "We have a problem!"; foreach my $tides (@{$data->{data}->{item}}) { my $format_date = "$tides->{date} $tides->{time}"; my $date_to_seconds = str2time($format_date); if( $date_to_seconds > $last_time and $date_to_seconds < $now_in_s +econds ) { $tides->{highlow} =~ s/L/Low/; $tides->{highlow} =~ s/H/High/; $current_tide = " Test: ".$tides->{highlow}." Tide at: ".$tides->{ +time}; $last_time = $date_to_seconds; } } print "$current_tide\n";

Replies are listed 'Best First'.
Re^2: Display tide based on time now.
by Anonymous Monk on Mar 27, 2013 at 12:51 UTC
    Unfortunately it does not work, it will not match any time before the first AM time, its back where my issue is.

      I might not be quite sure what you want to achieve. Can you please try this?

      my $last_time = 0; my $current_tide = "Now is before first tide in xml file."; foreach my $tides (@{$data->{data}->{item}}) { my $format_date = "$tides->{date} $tides->{time}"; my $date_to_seconds = str2time($format_date); if( $date_to_seconds > $last_time and $date_to_seconds <= $now_in_ +seconds ) { $tides->{highlow} =~ s/L/Low/; $tides->{highlow} =~ s/H/High/; $current_tide = " Test: ".$tides->{highlow}." Tide at: ".$tides->{ +time}; $last_time = $date_to_seconds; } } if( $now_in_seconds > $last_time ) { $current_tide = "Now is after the last tide in xml file." } print "$current_tide\n";
        Here is what I am trying to accomplish:

        There are 4 tides in the XML, sometimes 3 but the goal is:

        if time now in seconds is greater and equal to the first tide time in the XML, and the now in seconds is less than the second tide time in the XML print the first tide specs.

        if time now in seconds is greater and equal to the second tide time in the XML, and the now in seconds is less than the third tide time in the XML, print the second tide specs.

        if time now in seconds is greater and equal to the third tide time in the XML, and the now in seconds is less than the fourth tide time in the XML, print the third tide specs.

        if time now in seconds is greater and equal to the fourth tide time in the XML, and the now in seconds is less than the first tide time in the XML, print the fourth tide specs.


        I hope is clear, but thanks for trying!