| 154 | | my $last_run = &Date::Manip::ParseDateString("epoch " . $store->{last_run}); |
| 155 | | my $now = &Date::Manip::ParseDate("epoch $starttime"); |
| 156 | | my $weekdiffstr = &Date::Manip::DateCalc($last_run, $now); |
| 157 | | my $monthdiffstr = &Date::Manip::DateCalc($last_run, $now, undef, 1); |
| 158 | | |
| 159 | | my $months_since = (($monthdiffstr =~ /(\d+):(\d+):/) && ($1 * 12 + $2)); |
| 160 | | &rollover_units('month', $months_since); |
| 161 | | |
| 162 | | my $weeks_since = (($weekdiffstr =~ /0:0:(\d+):/) && $1); |
| 163 | | &rollover_units('week', $weeks_since); |
| 164 | | |
| 165 | | my $days_since = (($weekdiffstr =~ /0:0:(\d+):(\d+):/) && ($1 * 7 + $2)); |
| 166 | | &rollover_units('day', $days_since); |
| 167 | | |
| 168 | | my $hours_since = (($weekdiffstr =~ /0:0:(\d+):(\d+):(\d+):/) && ($1 * 168 + $2 * 24 + $3)); |
| 169 | | &rollover_units('hour', $hours_since); |
| 170 | | |
| 171 | | # print "Finished; per_hour 1 is: " . Dumper($store->{per_hour}->[1]) . "\n"; die; |
| | 153 | my @llast = localtime($store->{last_run}); |
| | 154 | my @lnow = localtime($starttime); |
| | 155 | |
| | 156 | # Figure out the difference. This is a little trickier than you |
| | 157 | # might think, since we want to know not how much time has |
| | 158 | # elapsed, but the difference in month/week/day/hour number. |
| | 159 | # For example, it may be 2 hours since we last ran, but if |
| | 160 | # we last ran at 11PM and it's now 1AM, we are in a new day |
| | 161 | # number. |
| | 162 | |
| | 163 | my $yrdiff = $lnow[5] - $llast[5]; |
| | 164 | my $modiff = (12 * $yrdiff) + $lnow[4] - $llast[4]; |
| | 165 | my $weekdiff = ($yrdiff * 52) + strftime("%U", @lnow) - strftime("%U", @llast); |
| | 166 | my $daydiff = ($yrdiff * 365) + $lnow[7] - $llast[7]; |
| | 167 | my $hrdiff = int($starttime / 3600) - int($store->{last_run} / 3600); |
| | 168 | |
| | 169 | &rollover_units('month', $modiff); |
| | 170 | &rollover_units('week', $weekdiff); |
| | 171 | &rollover_units('day', $daydiff); |
| | 172 | &rollover_units('hour', $hrdiff); |