PDA

View Full Version : آموزش: تابع AGO برای نمایش تاریخ به فرمت های مختلف (“چند ساعت پیش”)



morudi
پنج شنبه 19 اردیبهشت 1392, 16: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);

eshpilen
پنج شنبه 19 اردیبهشت 1392, 20:30 عصر
واسه این درست جواب نمیده:


$time=strtotime("-1 year"); echo ago($time,'fa',false);

مینویسه 11 ماه.

eshpilen
پنج شنبه 19 اردیبهشت 1392, 20:37 عصر
بعد مثلا این چی؟:


$time=strtotime("-1 year -6 month"); echo ago($time,'fa',false);

مینویسه 1 سال.

حتی این:


$time=strtotime("-1 year -11 month"); echo ago($time,'fa',false);

بازم مینویسه 1 سال.

amin7x
پنج شنبه 19 اردیبهشت 1392, 22:56 عصر
دوست عزیز لطفا مطلبی رو از سایت دیگه میزارید منبع (http://phpro.ir/%d8%aa%d8%a7%d8%a8%d8%b9-ago-%d8%a8%d8%b1%d8%a7%db%8c-%d9%86%d9%85%d8%a7%db%8c%d8%b4-%d8%aa%d8%a7%d8%b1%db%8c%d8%ae-%d8%a8%d9%87-%d9%81%d8%b1%d9%85%d8%aa-%d9%87%d8%a7%db%8c-%d9%85%d8%ae%d8%aa%d9%84/) رو هم ذکر کنید.

باتشکر

ساراعلی
پنج شنبه 17 اردیبهشت 1394, 17:54 عصر
لطفا در مورد این تاپیک بیشتر توضیح بدید خیلی بهش احتیاج دارم ممممممممممممممممممممممممم مممممممممممممم
چطوری وقتی کاربر یک فرم رو پر میکنه و اطلاعاتش تو دیتابیس ذخیره میشه زمان ثبتش رو میشه از این طریق نشون داد؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟:گریه::گ یه:

tuytoosh
شنبه 19 اردیبهشت 1394, 03:10 صبح
carbon.nesbot.com (http://carbon.nesbot.com/)

هر چی در مورد تایم و تاریخ بخواید رو به راحتی انجام میده