Ejemplo n.º 1
0
 /**
  * 解析自动任务
  * 返回下次执行的时间戳
  *
  * @param  array  $crontab
  * @param  int    $timestamp
  * @return int
  */
 public static function parse(array $conf, $timestamp = null)
 {
     $crontab = $conf['crontab'];
     $times = preg_split('/\\s+/', $crontab);
     isset($timestamp) || ($timestamp = time());
     $timeInfo = getdate($timestamp);
     self::$time[0] = self::field($times[0], $timeInfo['seconds'], 0, 59);
     self::$time[1] = self::field($times[1], $timeInfo['minutes'], 0, 59);
     self::$time[2] = self::field($times[2], $timeInfo['hours'], 0, 23);
     if ($times[5] == '*') {
         self::$time[3] = self::field($times[3], $timeInfo['mday'], 1, date('t'));
     } else {
         self::$time[3] = self::fieldWeek($times[5], $timeInfo['mday'], $timeInfo['wday']);
     }
     self::$time[4] = self::field($times[4], $timeInfo['mon'], 1, 12);
     $year = self::$isCeil ? $timeInfo['year'] + 1 : $timeInfo['year'];
     $time = mktime(current(self::$time[2]), current(self::$time[1]), current(self::$time[0]), current(self::$time[4]), current(self::$time[3]), $year);
     //重设变量
     self::$time = array();
     self::$isCeil = true;
     return $time;
 }