+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 پاسخ 531 بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط maryaam (106 امتیاز)
0 امتیاز
2 پاسخ 994 بازدید
0 امتیاز
0 پاسخ 1.6هزار بازدید
+1 امتیاز
2 پاسخ 7.9هزار بازدید
0 امتیاز
1 پاسخ 997 بازدید
0 امتیاز
0 پاسخ 225 بازدید
0 امتیاز
0 پاسخ 222 بازدید
0 امتیاز
0 پاسخ 726 بازدید
...