In many cases, it is really useful to know the exact time for how long a PHP script is running or how long will take PHP web page load. On the other hand it is also useful to know that how long a particular script operation or part of page load will take.

Following PHP Timing class is very simple to use, only create class and start timing and stop timing. Elapsed time function can be used also (elapsed time is calculated from script start time). Statistics can be displayed in print-functions and the same information without any formatting can also get with get-functions.

PHP Timing class

<?php

	class Timing {
		private $break;
		private $start_time;
		private $stop_time;

		// Constructor for Timing class
		public function __construct($break = "<br></br>") {
			$this->break = $break;
			// Set timezone
			date_default_timezone_set('UTC');
		}

		// Set start time
		public function start() {
			$this->start_time = microtime(true);
		}

		// Set stop/end time
		public function stop() {
			$this->stop_time = microtime(true);
		}

		// Returns time elapsed from start
		public function getElapsedTime() {
			return $this->getExecutionTime(microtime(true));
		}

		// Returns total execution time
		public function getTotalExecutionTime() {
			if (!$this->stop_time) {
				return false;
			}
			return $this->getExecutionTime($this->stop_time);
		}

		// Returns start time, stop time and total execution time
		public function getFullStats() {
			if (!$this->stop_time) {
				return false;
			}

			$stats = array();
			$stats['start_time'] = $this->getDateTime($this->start_time);
			$stats['stop_time'] = $this->getDateTime($this->stop_time);
			$stats['total_execution_time'] = $this->getExecutionTime($this->stop_time);

			return $stats;
		}

		// Prints time elapsed from start
		public function printElapsedTime() {
			echo $this->break . $this->break;
			echo "Elapsed time: " . $this->getExecutionTime(microtime(true));
			echo $this->break . $this->break;
		}

		// Prints total execution time
		public function printTotalExecutionTime() {
			if (!$this->stop_time) {
				return false;
			}

			echo $this->break . $this->break;
			echo "Total execution time: " . $this->getExecutionTime($this->stop_time);
			echo $this->break . $this->break;
		}

		// Prints start time, stop time and total execution time
		public function printFullStats() {
			if (!$this->stop_time) {
				return false;
			}

			echo $this->break . $this->break;
			echo "Script start date and time: " . $this->getDateTime($this->start_time);
			echo $this->break;
			echo "Script stop end date and time: " . $this->getDateTime($this->stop_time);
			echo $this->break . $this->break;
			echo "Total execution time: " . $this->getExecutionTime($this->stop_time);
			echo $this->break . $this->break;
		}

		// Format time to date and time
		private function getDateTime($time) {
			return date("Y-m-d H:i:s", $time);
		}

		// Get execution time by timestamp
		private function getExecutionTime($time) {
			return $time - $this->start_time;
		}
	}

PHP Timing class usage example 1

<?php

	// Create new Timing class with \n break
	$timing = new Timing("\n");
	
	// Start timing
	$timing->start();

	// Loop ten rounds and sleep one second per round
	for ($i=1;$i<=10;$i++) { 
		echo $i . "\t"; sleep(1);
		// Print elapsed time every 2 rounds
		if ($i%2==0) {
			$timing->printElapsedTime();
		}
	}
	
	// Stop/end timing
	$timing->stop();

	// Print only total execution time
	$timing->printTotalExecutionTime();

	// Print full stats
	$timing->printFullStats();

Example output:

$ php timing_example1.php 
1	2	

Elapsed time: 2.0003080368042

3	4	

Elapsed time: 4.0006020069122

5	6	

Elapsed time: 6.0008690357208

7	8	

Elapsed time: 8.0011501312256

9	10	

Elapsed time: 10.001409053802



Total execution time: 10.001439094543



Script start date and time: 2010-01-08 13:19:17
Script stop end date and time: 2010-01-08 13:19:27

Total execution time: 10.001439094543
$

PHP Timing class usage example 2

<?php
	// Create new Timing class with \n break
	$timing = new Timing("\n");
	
	// Start timing
	$timing->start();

	$elapsed_times = array();

	// Loop ten rounds and sleep one second per round
	for ($i=1;$igetElapsedTime();
	}

	echo "\n\n";	

	// Stop/end timing
	$timing->stop();

	// Get full stats
	$times = $timing->getFullStats();

	foreach ($elapsed_times as $key => $t) {
		$t2;
		if (isset($elapsed_times[$key-1])) {
			$t2 = $t - $elapsed_times[$key-1];
		}
		else {
			$t2 = $t;
		}
		echo "Round: " . $key . " Time: " . $t2 . "\n";
	}
	
	echo "Total execution time: " . $times['total_execution_time'] . "\n";

	echo $times['start_time'] . " - " . $times['stop_time'] . "\n";

Example output:

$ php timing_example2.php 
1	2	3	4	5	6	7	8	9	10	

Round: 1 Time: 1.0000989437103
Round: 2 Time: 1.0001330375671
Round: 3 Time: 1.000118970871
Round: 4 Time: 1.0001170635223
Round: 5 Time: 1.0001168251038
Round: 6 Time: 1.0001120567322
Round: 7 Time: 1.000118970871
Round: 8 Time: 1.0001220703125
Round: 9 Time: 1.0001239776611
Round: 10 Time: 1.0001330375671
Total execution time: 10.001236915588
2010-01-08 13:19:47 - 2010-01-08 13:19:57
$