Advertisement
Guest User

Untitled

a guest
Jul 21st, 2017
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 2.98 KB | None | 0 0
  1.                 # cron runs if dom OR dow
  2.                 # i want dom AND dow, so I can do "every second and fourth friday"
  3.                 # thus i will create two objects and iterate untill they match
  4.                 my $cronDom = new Schedule::Cron::Events( "$min $hour $dom $month *    without_dom", Date => [ ( localtime(time()) )[0..5] ] );
  5.                 my $cronDow = new Schedule::Cron::Events( "$min $hour *    $month $dow without_dom", Date => [ ( localtime(time()) )[0..5] ] );
  6.                 my ($sec, $min, $hour, $day, $month, $year);
  7.  
  8.                 # find the prevoius execution time
  9.                 ($sec, $min, $hour, $day, $month, $year) = $cronDom->previousEvent; $month+=1; $year+=1900; $domstamp = $day + 30*$month + 30*12*$year;
  10.                 ($sec, $min, $hour, $day, $month, $year) = $cronDow->previousEvent; $month+=1; $year+=1900; $dowstamp = $day + 30*$month + 30*12*$year;
  11.                 while( $domstamp > $dowstamp ) {  # decrease dom
  12.                         alert("decreasing dom");
  13.                         ($sec, $min, $hour, $day, $month, $year) = $cronDom->previousEvent; $month+=1; $year+=1900; $domstamp = $day + 30*$month + 30*12*$year;
  14.                 }
  15.                 while( $dowstamp > $domstamp ) {  # decrease dow
  16.                         ($sec, $min, $hour, $day, $month, $year) = $cronDow->previousEvent; $month+=1; $year+=1900; $dowstamp = $day + 30*$month + 30*12*$year;
  17.                         alert("decreasing dow");
  18.                 }
  19.                 # match!
  20.                 my $lastTime = "$year-$month-$day $hour:$min:$sec";
  21.  
  22.                 # find the next execution time
  23.                 ($sec, $min, $hour, $day, $month, $year) = $cronDom->nextEvent; $month+=1; $year+=1900; $domstamp = $day + 30*$month + 30*12*$year;
  24.                 ($sec, $min, $hour, $day, $month, $year) = $cronDow->nextEvent; $month+=1; $year+=1900; $dowstamp = $day + 30*$month + 30*12*$year;
  25.                 ($sec, $min, $hour, $day, $month, $year) = $cronDom->nextEvent; $month+=1; $year+=1900; $domstamp = $day + 30*$month + 30*12*$year;
  26.                 ($sec, $min, $hour, $day, $month, $year) = $cronDow->nextEvent; $month+=1; $year+=1900; $dowstamp = $day + 30*$month + 30*12*$year;
  27.                 while( $domstamp < $dowstamp ) {  # increase dom
  28.                         alert("increasing dom");
  29.                         ($sec, $min, $hour, $day, $month, $year) = $cronDom->nextEvent; $month+=1; $year+=1900; $domstamp = $day + 30*$month + 30*12*$year;
  30.                 }
  31.                 while( $dowstamp < $domstamp ) {  # increase dow
  32.                         ($sec, $min, $hour, $day, $month, $year) = $cronDow->nextEvent; $month+=1; $year+=1900; $dowstamp = $day + 30*$month + 30*12*$year;
  33.                         alert("increasing dow");
  34.                 }
  35.                 # match!
  36.                 my $thisTime = "$year-$month-$day $hour:$min:$sec";
  37.  
  38.                 print "this time $lastTime -- next time $thisTime -- time between is just one select statement away.\n";
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement