Get how much time has passed since given date in "...ago" format in PHP
Tags: php, webdev, oop
Published: 2019-12-11 10:43:56

#Hi everyone,

In this post I'm just sharing a piece of code to get the time elapsed between two dates, like *"12 seconds ago"*/*"4 hours ago"* etc.
This is probably nothing special at all, most programmers know how to do this without any problem, but there might be someone who finds it useful.

This is also probably not the best way to do it, but with my current knowledge and experience, this is what I could do. I believe this is a fairly simple solution, but still works perfectly.


```php
function timeElapsed($date){
		$months=array();
		for ($i=1; $i < 13; $i++) { 
			$month = date('F',mktime(0,0,0,$i));
			$months += [substr($month,0,3) => $i];
		}
		$date_year = date('Y', strtotime($date));//year of the date
		$date_month = date('m', strtotime($date));//month of the date
		$date_day = date('d', strtotime($date));//day of the date
		$date_hour = date('h', strtotime($date));//hour of the date
		$date_minute = date('i', strtotime($date));//minute of the date
		$current_year = date('Y');//current year(2019 in this case)

        //seconds passed between the given and current date
		$seconds_passed = round((time()-strtotime($date)),0);

        //minutes  passed between the given and current date
		$minutes_passed = round((time()-strtotime($date))/ 60,0);

        //hours passed between the given and current date
		$hours_passed = round((time()-strtotime($date))/ 3600,0);

        //days passed between the given and current date
		$days_passed = round((time()-strtotime($date))/ 86400,0);

		if($seconds_passed<60) echo $seconds_passed." second".($seconds_passed == (1) ? " " : "s")." ago";
        //outputs 1 second / 2-59 seconds ago

		else if($seconds_passed>=60 && $minutes_passed<60) echo $minutes_passed." minute".($minutes_passed == (1) ? " " : "s")." ago";
        //outputs 1 minute/ 2-59 minutes ago

		else if($minutes_passed>=60 && $hours_passed<24) echo $hours_passed." hour".($hours_passed == (1) ? " " : "s")." ago";
        //outputs 1 hour / 2-23 hours ago

		else if($hours_passed>=24 && $days_passed<2) echo "Yesterday at ".$date_hour.":".$date_minute;
        //outputs [Yesterday at 11:30] for example

		else{
			if($current_year!=$date_year){
				foreach($months as $month_name => $month_number){
					if($month_number==$date_month){
						echo $month_name." ".$date_day.", ".$date_year." ".$date_hour.":".$date_minute;
						//echo $date_hour < (12) ? "AM" : "PM " ;
                        //outputs [Dec 11, 2018 11:32] for example
					}
				}
			}
			else{
				foreach($months as $month_name => $month_number){
					if($month_number==$date_month){
						echo $month_name." ".$date_day.", ".$date_hour.":".$date_minute;
						//echo $date_hour < (12) ? "AM" : "PM " ;
                        //outputs [Dec 11, 11:32] for example
					}
				}
			}
		}
	}
```


**Just in case:**

```php
$months=array();
for ($i=1; $i < 13; $i++) { 
	$month = date('F',mktime(0,0,0,$i));
	$months += [substr($month,0,3) => $i];
}
```

**Is the same as manually creating the `array` like this**

```php
$months = array(
	"Jan"=>"01",
	"Feb"=>"02",
	"Mar"=>"03",
	"Apr"=>"04",
	"May"=>"05",
	"Jun"=>"06",
	"Jul"=>"07",
	"Aug"=>"08",
	"Sep"=>"09",
	"Oct"=>"10",
	"Nov"=>"11",
	"Dec"=>"12");
```

**And finally you just call it like this**

```php
echo timeElapsed($yourDate);
```