morudi
پنج شنبه 19 اردیبهشت 1392, 17:38 عصر
http://phpro.ir/wp-content/uploads/post-time-in-php.jpg با سلام .
تا بحال شاید دیده باشد تو بعضی از سایت هایی که معمولا هم با سیستم های مدیریت محتوا نوشته شده آخر پستاشون زمان انتشار مطلب را به این صورت نوشته “۵ ساعت پیش” یا “۳۰ روز پیش” یا “۱ قرن پیش” . امروز من سعی کردم تابعی رو که قبلا برا یکی از وب سایت هام نوشته بودم رو یکم تغییر بدم (با قابلیت نمایش به صورت فارسی و انگلیسی) و طرز استفاده رو براتون توضیح بدم .
function ago($tm, $lang = 'fa', $ashtml = true)
{
$local = array(
'style' => array('fa' => 'style="direction:rtl;"', 'en' =>
'style="direction:ltr"'),
'times' => array('fa' => array(
'ثانیه',
'دقیقه',
'ساعت',
'روز',
'هفته',
'ماه',
'سال',
'دهه'), 'en' => array(
'second',
'minute',
'hour',
'day',
'week',
'month',
'year',
'decade')),
'ago' => array('fa' => 'پیش', 'en' => 'ago'));
if (intval($tm) > 0)
{
$cur_tm = time();
$dif = $cur_tm - $tm;
$lngh = array(
1,
60,
3600,
86400,
604800,
2630880,
31570560,
315705600);
for ($v = sizeof($lngh) - 1; ($v >= 0) && (($no = $dif / $lngh[$v]) <= 1); $v--)
;
if ($v < 0)
$v = 0;
$_tm = $cur_tm - ($dif % $lngh[$v]);
$no = floor($no);
if ($no <> 1 && $lang == 'en')
$local['times'][$lang][$v] .= 's';
$x = sprintf("%d %s ", $no, $local['times'][$lang][$v]);
if ($ashtml)
return " " . $x . ' ' . $local['ago'][$lang] . "";
else
return $x . ' ' . $local['ago'][$lang];
} else
{
return '-';
}
}
حال برای استفاده به این صورت عمل کنید :
echo ago(strtotime("-1 day"));
خروجی : “۲۴ ساعت پیش”
$time=strtotime("-2 day"); echo ago($time,'en');
خروجی : “۲ days ago”
اگر هم بخواین خروجی عاری از هر نوع تگ html باشده به این صورت عمل کنید
$time=strtotime("-2 day"); echo ago($time,'fa',false);
تا بحال شاید دیده باشد تو بعضی از سایت هایی که معمولا هم با سیستم های مدیریت محتوا نوشته شده آخر پستاشون زمان انتشار مطلب را به این صورت نوشته “۵ ساعت پیش” یا “۳۰ روز پیش” یا “۱ قرن پیش” . امروز من سعی کردم تابعی رو که قبلا برا یکی از وب سایت هام نوشته بودم رو یکم تغییر بدم (با قابلیت نمایش به صورت فارسی و انگلیسی) و طرز استفاده رو براتون توضیح بدم .
function ago($tm, $lang = 'fa', $ashtml = true)
{
$local = array(
'style' => array('fa' => 'style="direction:rtl;"', 'en' =>
'style="direction:ltr"'),
'times' => array('fa' => array(
'ثانیه',
'دقیقه',
'ساعت',
'روز',
'هفته',
'ماه',
'سال',
'دهه'), 'en' => array(
'second',
'minute',
'hour',
'day',
'week',
'month',
'year',
'decade')),
'ago' => array('fa' => 'پیش', 'en' => 'ago'));
if (intval($tm) > 0)
{
$cur_tm = time();
$dif = $cur_tm - $tm;
$lngh = array(
1,
60,
3600,
86400,
604800,
2630880,
31570560,
315705600);
for ($v = sizeof($lngh) - 1; ($v >= 0) && (($no = $dif / $lngh[$v]) <= 1); $v--)
;
if ($v < 0)
$v = 0;
$_tm = $cur_tm - ($dif % $lngh[$v]);
$no = floor($no);
if ($no <> 1 && $lang == 'en')
$local['times'][$lang][$v] .= 's';
$x = sprintf("%d %s ", $no, $local['times'][$lang][$v]);
if ($ashtml)
return " " . $x . ' ' . $local['ago'][$lang] . "";
else
return $x . ' ' . $local['ago'][$lang];
} else
{
return '-';
}
}
حال برای استفاده به این صورت عمل کنید :
echo ago(strtotime("-1 day"));
خروجی : “۲۴ ساعت پیش”
$time=strtotime("-2 day"); echo ago($time,'en');
خروجی : “۲ days ago”
اگر هم بخواین خروجی عاری از هر نوع تگ html باشده به این صورت عمل کنید
$time=strtotime("-2 day"); echo ago($time,'fa',false);