تابع AGO برای نمایش تاریخ به فرمت های مختلف (“چند ساعت پیش”)

دی ۲۷, ۱۳۹۱ توسط : حامد

با سلام .

تا بحال شاید دیده باشد  تو بعضی از سایت هایی که معمولا هم با سیستم های مدیریت محتوا نوشته شده آخر پستاشون زمان انتشار مطلب را به این صورت نوشته  “۵ ساعت پیش” یا “۳۰ روز پیش” یا “۱ قرن پیش”   . امروز من سعی کردم تابعی رو که قبلا برا یکی از وب سایت هام نوشته بودم رو یکم تغییر بدم (با قابلیت نمایش به صورت فارسی و انگلیسی) و طرز استفاده رو براتون توضیح بدم .

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);

بازدید : ۳۹۰۶

Hossein
فروردین ۵, ۱۳۹۲ @ ۱:۰۱ ق.ظ

کاش یک بار بعد از فرستادن کد رو نگاه می‌کردید.

پاسخ دادن
    سعید
    فروردین ۱۱, ۱۳۹۲ @ ۳:۲۶ ب.ظ

    سلام
    میشه بگید کجاش مشکل داره؟

    پاسخ دادن
      Hossein
      فروردین ۱۳, ۱۳۹۲ @ ۲:۳۹ ق.ظ

      من اینکه ‎> ‏ روی جای > گذاشته بود گفتم.

      پاسخ دادن
        Hossein
        فروردین ۱۳, ۱۳۹۲ @ ۲:۴۴ ق.ظ

        منظورم &gt; جای > بود

        پاسخ دادن
          سعید
          فروردین ۱۴, ۱۳۹۲ @ ۱۱:۱۳ ق.ظ

          درستش کردم.
          ممنون از اینکه اطلاع دادی

فروردین ۱۳, ۱۳۹۲ @ ۷:۲۷ ق.ظ

سعید جان راست میگه کد ها رو دیتابیست ریخته بهم !

پاسخ دادن
چیا
اردیبهشت ۷, ۱۳۹۴ @ ۱۲:۲۴ ب.ظ

ممنون …

پاسخ دادن

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *


*