18 protected $finishedAt;
20 public function start()
22 if ($this->startedAt) {
25 // Get time in seconds as a float, accurate to the microsecond.
26 $this->startedAt = microtime(true);
29 public function stop()
31 $this->finishedAt = microtime(true);
37 public function elapsed()
39 $finished = $this->finishedAt ? $this->finishedAt : microtime(true);
40 if ($finished - $this->startedAt <= 0) {
43 return $finished - $this->startedAt;
47 * Format a duration into a human-readable time
49 * @param float $duration Duration in seconds, with fractional component
53 public static function formatDuration($duration)
55 if ($duration >= self::DAY * 2) {
56 return gmdate('z \d\a\y\s H:i:s', $duration);
58 if ($duration > self::DAY) {
59 return gmdate('\1 \d\a\y H:i:s', $duration);
61 if ($duration > self::HOUR) {
62 return gmdate("H:i:s", $duration);
64 if ($duration > self::MINUTE) {
65 return gmdate("i:s", $duration);
67 return round($duration, 3).'s';