/** * 解析自动任务 * 返回下次执行的时间戳 * * @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; }