0

I am new in PHP. I am getting time difference in below time stamp code.

public function time_ago($date) {
    if(empty($date)) {
        return "No date provided";
    }
    $periods = array("second", "minute", "hour", "day", "week", "month", "year", "decade");
    $lengths = array("60","60","24","7","4.35","12","10");
    $now = time();
    $unix_date = strtotime($date);
    // check validity of date
    if(empty($unix_date)) {
        return "Bad date";
    }
    // is it future date or past date
    if($now > $unix_date) {
        $difference = $now - $unix_date;
        $tense = "ago";
    } else {
        $difference = $unix_date - $now;
        $tense = "from now";}
    for($j = 0; $difference >= $lengths[$j] && $j < count($lengths)-1; $j++) {
        $difference /= $lengths[$j];
    }
    $difference = round($difference);
    if($difference != 1) {
        $periods[$j].= "s";
    }
    return "$difference $periods[$j] {$tense}";
}

I am getting result 5 hours even I post now. I want result like just now or 45 secs ago or 1 min ago.

Can anyone help me to resolve this issue.

Barmar
  • 741,623
  • 53
  • 500
  • 612

1 Answers1

0

You have to set timezone of your location.

public function time_ago($date) {
date_default_timezone_set(date_default_timezone_get());
if(empty($date)) {
    return "No date provided";
}
$periods = array("second", "minute", "hour", "day", "week", "month", "year", "decade");
$lengths = array("60","60","24","7","4.35","12","10");
$now = time();
$unix_date = strtotime($date);
// check validity of date
if(empty($unix_date)) {
    return "Bad date";
}
// is it future date or past date
if($now > $unix_date) {
    $difference = $now - $unix_date;
    $tense = "ago";
} else {
    $difference = $unix_date - $now;
    $tense = "from now";}
for($j = 0; $difference >= $lengths[$j] && $j < count($lengths)-1; $j++) {
    $difference /= $lengths[$j];
}
$difference = round($difference);
if($difference != 1) {
    $periods[$j].= "s";
}
return "$difference $periods[$j] {$tense}";
}
Abhishek
  • 1,008
  • 1
  • 16
  • 39