+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 پاسخ 2.1هزار بازدید
0 امتیاز
0 پاسخ 1.6هزار بازدید
0 امتیاز
1 پاسخ 717 بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط maryaam (106 امتیاز)
0 امتیاز
2 پاسخ 1.2هزار بازدید
0 امتیاز
0 پاسخ 1.7هزار بازدید
+1 امتیاز
2 پاسخ 8.1هزار بازدید
0 امتیاز
1 پاسخ 1.0هزار بازدید
0 امتیاز
0 پاسخ 333 بازدید
0 امتیاز
0 پاسخ 311 بازدید
0 امتیاز
0 پاسخ 808 بازدید
...