Date 輔助函式

Date 輔助函式包含了各種處理日期的相關函式。

導入輔助函式

Date 輔助函式的載入語法如下

$this->load->helper('date');

可用函式格式

允許使用的函式格式如下:

now([$timezone = NULL])
Parameters:
  • $timezone (string) – 時區
Returns:

UNIX 時間戳記

Return type:

整數

根據你在 config 檔案中 “time reference“ 的設定,同時參考你伺服器的本地時間或任一 PHP 所支援的時區,並以 UNIX 時間戳記的格式回傳現在的時間,如果你沒有試圖將設定改為 PHP 所支援的任一時區(不過當你在經營一個網站且讓各個使用者可以各別設置時區的話你通常就會做),就沒有必要使用此函式來取代原本 PHP 的 time () 了。

echo now('Australia/Victoria');

如果沒有提供時區,將會回傳基於 time_reference 設定的 ``time ()``。

mdate([$datestr = ''[, $time = '']])
Parameters:
  • $datestr (string) – 日期字串
  • $time (int) – UNIX 時間戳記
Returns:

MySQL 格式的日期

Return type:

字串

此函式除了可以讓你使用 MySQL 的日期格式(字串中每個字母前方要加上百分比符號,如:`%Y %m %d`)之外,其實跟 PHP 的 date() 相當雷同。

使用此函式的好處是你沒必要去過濾任何非日期的字符,其他動作就像你平常使用 date() 函式一樣。

範例

$datestring = 'Year: %Y Month: %m Day: %d - %h:%i %a';
$time = time();
echo mdate($datestring, $time);

如果第二個參數沒有指定時間戳記,將會使用現在的時間。

standard_date([$fmt = 'DATE_RFC822'[, $time = NULL]])
Parameters:
  • $fmt (string) – 日期格式
  • $time (int) – UNIX 時間戳記
Returns:

已格式化的日期或當格式錯誤時回傳 FALSE

Return type:

字串

回傳你所指定的日期標準格式所產生的日期字串。

範例

$format = 'DATE_RFC822';
$time = time();
echo standard_date($format, $time);

支援格式:

local_to_gmt([$time = ''])
Parameters:
  • $time (int) – UNIX 時間戳記
Returns:

UNIX 時間戳記

Return type:

int

輸入 UNIX 時間戳記後將回傳以 GMT 表示的時間。

範例

$gmt = local_to_gmt(time());
gmt_to_local([$time = ''[, $timezone = 'UTC'[, $dst = FALSE]]])
Parameters:
  • $time (int) – UNIX 時間戳記
  • $timezone (string) – 時區
  • $dst (bool) – 是否有啟用 DST
Returns:

UNIX 時間戳記

Return type:

整數

輸入 UNIX 時間戳記(參考自 GMT)後將其轉化為符合當地時區的時間戳記,並且可選擇計入日光節約時間。

範例

$timestamp = 1140153693;
$timezone  = 'UM8';
$daylight_saving = TRUE;
echo gmt_to_local($timestamp, $timezone, $daylight_saving);
mysql_to_unix([$time = ''])
Parameters:
  • $time (string) – MySQL 時間戳記
Returns:

UNIX 時間戳記

Return type:

int

輸入 MySQL 時間戳記後將回傳 UNIX 時間戳記。

範例

$unix = mysql_to_unix('20061124092345');
unix_to_human([$time = ''[, $seconds = FALSE[, $fmt = 'us']]])
Parameters:
  • $time (int) – UNIX 時間戳記
  • $seconds (bool) – 是否顯示秒數
  • $fmt (string) – 格式(美規或歐規)
Returns:

已格式化的日期

Return type:

字串

輸入 UNIX 時間戳記後將回傳可清楚識別的時間字串,格式如下:

YYYY-MM-DD HH:MM:SS AM/PM

如果你需要在表單欄位中顯示日期的話,這個函式將會相當有用。

你可以選擇顯示或隱藏秒數,同時可以被設定成歐規或美規,如果只送出時間戳記,預設將會回傳秒數隱藏而且是美規的時間。

範例

$now = time();
echo unix_to_human($now); // 美規時間秒數隱藏
echo unix_to_human($now, TRUE, 'us'); // 美規時間秒數顯示
echo unix_to_human($now, TRUE, 'eu'); // 歐規時間秒數顯示
human_to_unix([$datestr = ''])
Parameters:
  • $datestr (int) – 日期字串
Returns:

UNIX 時間戳記或失敗時回傳 FALSE

Return type:

整數

unix_to_time() 完全相反的函式,輸入人類可識別的時間格式後將回傳 UNIX 時間戳記,假設你需要透過表單讓使用者填寫日期的話,這個函式將會相當有用。 如果使用者輸入的日期格式並非如上一函式所述的話,將會回傳 FALSE。

範例

$now = time();
$human = unix_to_human($now);
$unix = human_to_unix($human);
nice_date([$bad_date = ''[, $format = FALSE]])
Parameters:
  • $bad_date (int) – 格式紊亂的類日期字串
  • $format (string) – 回傳的日期格式(就像使用 date() 函式一樣)
Returns:

已格式化的日期

Return type:

字串

此函式可將一格式紊亂的日期字串轉成至少可以用的格式,當然它也還是接受符合標準格式的啦。

此函式預設將會回傳 UNIX 時間戳記,並且你可以選擇性地丟出時間格式(就像使用 date() 函式一樣)當作第二個參數。

範例

$bad_date = '199605';
// Should Produce: 1996-05-01
$better_date = nice_date($bad_date, 'Y-m-d');

$bad_date = '9-11-2001';
// Should Produce: 2001-09-11
$better_date = nice_date($bad_date, 'Y-m-d');
timespan([$seconds = 1[, $time = ''[, $units = '']]])
Parameters:
  • $seconds (int) – 秒數
  • $time (string) – UNIX 時間戳記
  • $units (int) – 顯示的時間單位數量
Returns:

已格式化的不同時間

Return type:

字串

將 UNIX 時間戳記格式化後回傳的值如下

1 Year, 10 Months, 2 Weeks, 5 Days, 10 Hours, 16 Minutes

第一個參數必須包含 UNIX 時間戳記,第二個參數包含的時間戳記必須比第一個參數大,第三個參數選填且可以限制顯示的時間單位數量。

如果第二個參數是空的,將會顯示現在時間。

最常被用來顯示從過去某個時間點到現在總共經過多久時間。

範例

$post_date = '1079621429';
$now = time();
$units = 2;
echo timespan($post_date, $now, $units);
days_in_month([$month = 0[, $year = '']])
Parameters:
  • $month (int) – 數字化的月份
  • $year (int) – 數字化的年份
Returns:

在特定月份中的天數

Return type:

整數

輸入年月後回傳該月有幾天,含閏年計算。

範例

echo days_in_month(06, 2005);

如果第二個參數為空,則預設使用今年。

date_range([$unix_start = ''[, $mixed = ''[, $is_unix = TRUE[, $format = 'Y-m-d']]]])
Parameters:
  • $unix_start (int) – 範圍內起始的 UNIX 時間戳記
  • $mixed (int) – 範圍內結束 UNIX 時間戳記或日期間隔
  • $is_unix (bool) – 如果 $mixed 不是時間戳記就設為 FALSE
  • $format (string) – 日期格式就如同在 date() 用的那樣
Returns:

日期陣列

Return type:

陣列

回傳在自訂時間內的日期陣列。

範例

$range = date_range('2012-01-01', '2012-01-15');
echo "First 15 days of 2012:";
foreach ($range as $date)
{
        echo $date."\n";
}
timezones([$tz = ''])
Parameters:
  • $tz (string) – 時區代號
Returns:

與 UTC 差距多少小時

Return type:

整數

輸入時區代號(參考最下方列表)後將回傳與 UTC 差距多少小時。

範例

echo timezones('UM5');

很適用於會用到 timezone_menu() 的時機。

timezone_menu([$default = 'UTC'[, $class = ''[, $name = 'timezones'[, $attributes = '']]]])
Parameters:
  • $default (string) – 時區
  • $class (string) – 下拉選單的 CSS Class name
  • $name (string) – 下拉選單的 Name
  • $attributes (mixed) – HTML 屬性
Returns:

包含時區訊息的 HTML 下拉選單

Return type:

字串

產生一個可以選時區的下拉選單,結果如下:

如果你有個具備會員系統的網站,且允許使用者設置各自的時區,這個下拉選單將會非常好用。

第一個參數讓你設定預設時區,舉例來說你要設定太平洋時間為預設值的話可以這麼寫:

echo timezone_menu('UM8');

當然也請參考下方的時區列表。

第二個參數讓你設定選單的 CSS Class name。

第四個參數讓你可以在下拉選單的標籤中額外添加屬性。

Timezone 參考列表

下方的表格包含所有時區以及其相關地點。

提醒一下,列表有些地點為了格式化有稍作修減。