2010-04-09 24 views

回答

4

簡答題:沒有。

timespan()方法不提供任何方法來定製其輸出中的細節級別。 CodeIgniter確實可以輕鬆覆蓋內置函數,以便它們按照您的喜好進行操作。

有可能是一個更優雅的解決方案(見下文),但以下是我想出的。創建一個應用程序/傭工稱爲MY_date_helper.php文件,並把下面的修改時間跨度()到它:

<?php 
// Adds a third argument to timespan() that stops display of minutes/ 
// seconds in the final output 
function timespan($seconds = 1, $time = '', $display_mins_secs = true) 
{ 
    $CI =& get_instance(); 
    $CI->lang->load('date'); 

    if (! is_numeric($seconds)) 
    { 
     $seconds = 1; 
    } 

    if (! is_numeric($time)) 
    { 
     $time = time(); 
    } 

    if ($time <= $seconds) 
    { 
     $seconds = 1; 
    } 
    else 
    { 
     $seconds = $time - $seconds; 
    } 

    $str = ''; 
    $years = floor($seconds/31536000); 

    if ($years > 0) 
    { 
     $str .= $years.' '.$CI->lang->line((($years > 1) ? 'date_years' : 'date_year')).', '; 
    } 

    $seconds -= $years * 31536000; 
    $months = floor($seconds/2628000); 

    if ($years > 0 OR $months > 0) 
    { 
     if ($months > 0) 
     { 
      $str .= $months.' '.$CI->lang->line((($months > 1) ? 'date_months' : 'date_month')).', '; 
     } 

     $seconds -= $months * 2628000; 
    } 

    $weeks = floor($seconds/604800); 

    if ($years > 0 OR $months > 0 OR $weeks > 0) 
    { 
     if ($weeks > 0) 
     { 
      $str .= $weeks.' '.$CI->lang->line((($weeks > 1) ? 'date_weeks' : 'date_week')).', '; 
     } 

     $seconds -= $weeks * 604800; 
    }   

    $days = floor($seconds/86400); 

    if ($months > 0 OR $weeks > 0 OR $days > 0) 
    { 
     if ($days > 0) 
     { 
      $str .= $days.' '.$CI->lang->line((($days > 1) ? 'date_days' : 'date_day')).', '; 
     } 

     $seconds -= $days * 86400; 
    } 

    $hours = floor($seconds/3600); 

    if ($days > 0 OR $hours > 0) 
    { 
     if ($hours > 0) 
     { 
      $str .= $hours.' '.$CI->lang->line((($hours > 1) ? 'date_hours' : 'date_hour')).', '; 
     } 

     $seconds -= $hours * 3600; 
    } 

    // don't display minutes/seconds unless $display_mins_secs 
    // == true 
    if ($display_mins_secs) 
    { 
     $minutes = floor($seconds/60); 

     if ($days > 0 OR $hours > 0 OR $minutes > 0) 
     { 
      if ($minutes > 0) 
      { 
       $str .= $minutes.' '.$CI->lang->line((($minutes > 1) ? 'date_minutes' : 'date_minute')).', '; 
      } 

      $seconds -= $minutes * 60; 
     } 

     if ($str == '') 
     { 
      $str .= $seconds.' '.$CI->lang->line((($seconds > 1) ? 'date_seconds' : 'date_second')).', '; 
     } 
    } 

    return substr(trim($str), 0, -1); 
} 

?> 

笨它將自動找到該文件,並使用你的時間跨度()函數,而不是內置版本。 this page的「擴展助手」部分提供了一些關於它如何工作的更多信息。

要利用「擴展」的入庫時間()函數,只傳遞的假第三個參數,如下所示:

$變量=時間跨度($秒,$時間,假);

有可能是一個更優雅的解決方案,也許使用PHP的本地DateTime對象(請參閱here),但從問題我認爲上述timespan()修改更貼近您的需求。

+0

美麗。非常感謝! – Shamoon 2010-04-12 13:05:09

+0

簡單的解決方案!使用它!謝謝! – JeroenVdb 2012-06-20 13:29:28

1

我知道這是一箇舊的線程,但我只是發現它,幾乎是我尋找的解決方案。我只是想通過數字來限制級別。我在腳本中進行了小小的修改,我將$ str作爲一個數組並添加每年,每月,每天等。然後,我遍歷數組,直到給定的限制。之後,我只是內爆一個「,」並返回結果。

也許別人也可以享受這個劇本?

<?php 
// Adds a third argument to timespan() that limits the text string at given level 
function timespan($seconds = 1, $time = '', $limit=null) 
{ 
    $CI =& get_instance(); 
    $CI->lang->load('date'); 

    if (! is_numeric($seconds)) 
    { 
     $seconds = 1; 
    } 

    if (! is_numeric($time)) 
    { 
     $time = time(); 
    } 

    if ($time <= $seconds) 
    { 
     $seconds = 1; 
    } 
    else 
    { 
     $seconds = $time - $seconds; 
    } 

    $str = array(); 
    $years = floor($seconds/31536000); 

    if ($years > 0) 
    { 
     $str[] = $years.' '.$CI->lang->line((($years > 1) ? 'date_years' : 'date_year')); 
    } 

    $seconds -= $years * 31536000; 
    $months = floor($seconds/2628000); 

    if ($years > 0 OR $months > 0) 
    { 
     if ($months > 0) 
     { 
      $str[] = $months.' '.$CI->lang->line((($months > 1) ? 'date_months' : 'date_month')); 
     } 

     $seconds -= $months * 2628000; 
    } 

    $weeks = floor($seconds/604800); 

    if ($years > 0 OR $months > 0 OR $weeks > 0) 
    { 
     if ($weeks > 0) 
     { 
      $str[] = $weeks.' '.$CI->lang->line((($weeks > 1) ? 'date_weeks' : 'date_week')); 
     } 

     $seconds -= $weeks * 604800; 
    }   

    $days = floor($seconds/86400); 

    if ($months > 0 OR $weeks > 0 OR $days > 0) 
    { 
     if ($days > 0) 
     { 
      $str[] = $days.' '.$CI->lang->line((($days > 1) ? 'date_days' : 'date_day')); 
     } 

     $seconds -= $days * 86400; 
    } 

    $hours = floor($seconds/3600); 

    if ($days > 0 OR $hours > 0) 
    { 
     if ($hours > 0) 
     { 
      $str[] = $hours.' '.$CI->lang->line((($hours > 1) ? 'date_hours' : 'date_hour')); 
     } 

     $seconds -= $hours * 3600; 
    } 

    $minutes = floor($seconds/60); 

    if ($days > 0 OR $hours > 0 OR $minutes > 0) 
    { 
     if ($minutes > 0) 
     { 
      $str[] = $minutes.' '.$CI->lang->line((($minutes > 1) ? 'date_minutes' : 'date_minute')); 
     } 

     $seconds -= $minutes * 60; 
    } 

    if ($str == '') 
    { 
     $str[] = $seconds.' '.$CI->lang->line((($seconds > 1) ? 'date_seconds' : 'date_second')); 
    } 

    // Only show number of array elements depending on limit. 
    if($limit) 
    { 
     $i = 0; 
     foreach($str as $level) 
     { 
      if($i >= $limit) 
       unset($str[$i]); 
      $i++; 
     } 
    } 

    $return = implode(', ', $str); 

    return trim($return); 
} 
相關問題