+1 امتیاز
قبل در برنامه نویسی توسط (314 امتیاز)
ویرایش شده قبل توسط
من به یک تابع یا کلاس نیاز داشتم که زمان گذشته شده از زمان مورد نظر را به صورتهای زیر نمایش بده:

1 روز قبل

20 دقیقه قبل

2 پاسخ

+2 امتیاز
قبل توسط (1.9هزار امتیاز)
انتخاب شده قبل توسط
 
بهترین پاسخ

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


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 '-';
    }
}
  • نکته اگر از الگو مانند MVC  , ... استفاده می کنی درون VIew قرار نده و فایل درون Controller باشه.

استفاده :

     <time  class="entry-date">
                      <?php echo(ago(strtotime($row->dttime))); ?>
                  </time>

نمایی از خروجی :

+2 امتیاز
قبل توسط (1.1هزار امتیاز)

کد زیر رو چک کنید. البته برای نیاز خودتون باید تغییرش بدین:


$time = strtotime('2010-04-28 17:25:43');
 
echo elapsedTime($time).' قبل';
 
function elapsedTime($time)
{
 
    $time = time() - $time; // to get the time since that moment
 
    $tokens = array (
        31536000 => 'سال',
        2592000 => 'ماه',
        604800 => 'هفته',
        86400 => 'روز',
        3600 => 'ساعت',
        60 => 'دقیقه',
        1 => 'ثانیه'
    );
 
    foreach ($tokens as $unit => $text) {
        if ($time < $unit) continue;
        $numberOfUnits = floor($time / $unit);
        return $numberOfUnits.' '.$text);
    }
 
}

سوالات مشابه

+1 امتیاز
1 پاسخ 1.6هزار بازدید
0 امتیاز
0 پاسخ 1.5هزار بازدید
0 امتیاز
1 پاسخ 523 بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط maryaam (106 امتیاز)
0 امتیاز
2 پاسخ 971 بازدید
0 امتیاز
0 پاسخ 1.5هزار بازدید
+1 امتیاز
2 پاسخ 7.9هزار بازدید
0 امتیاز
1 پاسخ 989 بازدید
0 امتیاز
0 پاسخ 219 بازدید
0 امتیاز
0 پاسخ 217 بازدید
0 امتیاز
0 پاسخ 721 بازدید
...