تبدیل timestamp به زمان گذشته در PHP
mohsen•1 هفته قبل
ارسال شده در
phpفهرست صفحه
در حال حاضر، برای تبدیل timestamp هایی به فرمت 2009-09-12 20:57:19
به عباراتی مانند 3 دقیقه قبل
در PHP، میتوان از توابع مختلفی بهره برد. در ادامه، چند روش متداول برای انجام این کار ارائه شده است.
روش اول: استفاده از توابع DateTime در PHP
میتوانید از کلاسی به نام DateTime
و متد diff
برای محاسبه زمان گذشته استفاده کنید. کد زیر یک تابع را تعریف میکند که زمان گذشته را از تاریخ ورودی محاسبه میکند:
function time_elapsed_string($datetime, $full = false) {
$now = new DateTime;
$ago = new DateTime($datetime);
$diff = $now->diff($ago);
// محاسبه هفتهها
$diff->w = floor($diff->d / 7);
$diff->d -= $diff->w * 7;
$string = array(
'y' => 'سال',
'm' => 'ماه',
'w' => 'هفته',
'd' => 'روز',
'h' => 'ساعت',
'i' => 'دقیقه',
's' => 'ثانیه',
);
foreach ($string as $k => &$v) {
if ($diff->$k) {
$v = $diff->$k . ' ' . $v;
} else {
unset($string[$k]);
}
}
if (!$full) $string = array_slice($string, 0, 1);
return $string ? implode(', ', $string) . ' قبل' : 'همین الآن';
}
// مثال استفاده
echo time_elapsed_string('2009-09-12 20:57:19');
روش دوم: استفاده از آرایهها
یک رویکرد دیگر میتواند استفاده از آرایهها برای محاسبه زمان باشد. این روش نیز مشابه تابع قبلی عمل میکند و با محاسبه زمانهای مختلف، نتیجه مورد نظر را تولید میکند:
function time_elapsed_string($ptime)
{
$etime = time() - strtotime($ptime);
if ($etime < 1) {
return '0 ثانیه';
}
$a = array(
365 * 24 * 60 * 60 => 'سال',
30 * 24 * 60 * 60 => 'ماه',
24 * 60 * 60 => 'روز',
60 * 60 => 'ساعت',
60 => 'دقیقه',
1 => 'ثانیه',
);
foreach ($a as $secs => $str) {
$d = $etime / $secs;
if ($d >= 1) {
$r = round($d);
return $r . ' ' . ($r > 1 ? $str . 'ها' : $str) . ' قبل';
}
}
}
// مثال استفاده
echo time_elapsed_string('2009-09-12 20:57:19');
روش سوم: استفاده از کتابخانه Carbon
کتابخانه Carbon، که یک افزونه برای کلاس DateTime در PHP است، میتواند به سادگی کار شما را انجام دهد. این کتابخانه شامل متدی به نام diffForHumans
است که به راحتی زمان گذشته را به فرمت قابل فهم نمایش میدهد:
require 'vendor/autoload.php';
use Carbon\Carbon;
$dt = Carbon::parse('2009-09-12 20:57:19');
echo $dt->diffForHumans();
رای
0
ارسال نظر
مرتب سازی:
اولین نفری باشید که نظر می دهید!