php 學習筆記之日期時間操作一籮筐

php-datetime-overview-doc.png

格式化日期時間

date : 格式化日期時間
  • 場景

將當前日期時間或者特定日期時間格式化輸出爲特定格式的字符串,常用於人性化展示信息.

  • 說明

返回給定時間戳格式化後所產生的日期時間字符串,如果沒有給出時間戳則默認使用本地當前時間.

  • 備註
格式 說明 返回值示例
Y 4 位數字完整表示的年份 2019
y 2 位數字表示的年份 19
M 三個字母縮寫表示的月份 Jan 到 Dec
m 數字表示的月份,有前導零 01 到 12
D 星期中的第幾天,文本表示,3個字母 Mon 到 Sun
d 月份中的第幾天,有前導零的 2 位數字 01 到 31
H 小時,24 小時格式,有前導零 00 到 23
h 小時,12 小時格式,有前導零 01 到 12
I 是否爲夏令時 如果是夏令時爲1 ,否則爲 0
i 有前導零的分鐘數 00 到 59
S 每月天數後面的英文後綴,2 個字符 st,nd,rd 或者 th ,可以和 j 一起用
s 秒數,有前導零 00 到 59
  • 常用格式
// 形如 2019-05-31 12:00:00
echo date("Y-m-d H:i:s");

// 形如 2019/05/31 12:00:00
echo date("Y/m/d H:i:s");

// 形如 2019年05月31日 12時00分00秒
echo date("Y年m月d日 H時i分s秒");
  • 示例
<?php
// 設置當前時區爲上海時區
date_default_timezone_set("Asia/Shanghai");

// 獲取當前時區 : Asia/Shanghai
echo "當前時區 : ".date_default_timezone_get()."<br/>";

// `Y年m月d日 H時i分s秒` 格式化當前時間 : 2019年05月30日 22時32分46秒
echo "當前時間 : ".date("Y年m月d日 H時i分s秒")."<br/>";

// `Y-m-d H:i:s` 格式化當前時間 : 2019-05-30 22:32:46
echo "當前時間 : ".date("Y-m-d H:i:s")."<br/>";

// `w` 星期中的第幾天,數字表示: 0(表示星期天)到 6(表示星期六)
switch (date("w")) {
    case '0':
        $dayStr = "日";
        break;
    case '1':
        $dayStr = "一";
        break;
    case '2':
        $dayStr = "二";
        break;
    case '3':
        $dayStr = "三";
        break;
    case '4':
        $dayStr = "四";
        break;
    case '5':
        $dayStr = "五";
        break;
    case '6':
        $dayStr = "六";
        break;
    default:
        $dayStr = "未知";
        break;
} 
// 2019年05月30日 星期四
echo "當前時間 : ".date("Y年m月d日")." 星期".$dayStr."<br/>";

echo "<hr/>";

// `z` 年份中的第幾天 : 今天是全年的第149天
echo "今天是全年的第".date("z")."天<br/>";

// `W` ISO-8601 格式年份中的第幾周,每週從星期一開始 : 本週是全年的第22周
echo "本週是全年的第".date("W")."周<br/>";

// `t` 指定的月份有幾天 : 本月共有31天
echo "本月共有".date("t")."天<br/>";

?>

日期轉化時間戳

time : 返回當前的 Unix 時間戳
  • 場景

獲取當前日期時間或特定日期時間的時間戳,常用於日期時間之間的相互轉換.

  • 說明

返回自從 Unix 紀元(格林威治時間 1970年1月1日 00:00:00)到當前時間的秒數.

  • 示例
<?php
// 設置當前時區爲上海時區
date_default_timezone_set("Asia/Shanghai");

// 獲取當前時區
echo "當前時區 : ".date_default_timezone_get()."<br/>";

// 一週前的日期時間: 7 days; 24 hours; 60 mins; 60 secs
$preWeek = time() - (7 * 24 * 60 * 60);
echo "現在是".date("Y-m-d H:i:s").",上週是".date("Y-m-d H:i:s",$preWeek)."<br/>";

// 一週後的日期時間: 7 days; 24 hours; 60 mins; 60 secs
$nextWeek = time() + (7 * 24 * 60 * 60);
echo "現在是".date("Y-m-d H:i:s").",下週是".date("Y-m-d H:i:s",$nextWeek)."<br/>";

?>
microtime : 返回當前 Unix 時間戳和微秒數
  • 場景

獲取當前日期時間或特定日期時間的時間戳,常用於程序運行過程打點分析,也可以用於日期時間之間的互相轉換.

  • 說明

當前 Unix 時間戳以及微秒數,本函數僅在支持 gettimeofday()` 系統調用的操作系統下可用.

  • 示例
<?php
// 設置當前時區爲上海時區
date_default_timezone_set("Asia/Shanghai");

// 獲取當前時區
echo "當前時區 : ".date_default_timezone_get()."<br/>";

// 當前日期時間戳
echo "當前日期時間戳: ".time()." <--> ".microtime()." <--> ".microtime(TRUE)."<br/>";
?>
mktime : 取得一個日期的 Unix 時間戳
  • 場景

獲取給定日期的時間戳,按照"時分秒 月日年"格式依次解析,返回時間戳.

  • 說明

根據給出的參數返回 Unix 時間戳.

  • 備註
格式 說明 參數示例
H hour 小時數 00 到 23
i minute 分鐘數 00 到 59
s second 秒數 00 到 59
n month 月份數 01 到 12
j day 天數 01 到 31
Y year 年份數,可以是兩位或四位數字 0-69 對應於 2000-2069 ,70-100 對應於 1970-2000
格式: 時分秒 月日年,支持從右往左依次省略,被省略的值取當前時間的對應值.
  • 示例
<?php
// 設置當前時區爲上海時區
date_default_timezone_set("Asia/Shanghai");

// 獲取當前時區
echo "當前時區 : ".date_default_timezone_get()."<br/>";

// 指定日期時間戳: 時分秒 月日年 : 1559275200 <--> 2019-05-31 12:00:00
echo "2019年05月31日 12:00:00 的時間戳: ".mktime(12,0,0,5,31,2019)." <--> ".date("Y-m-d H:i:s", mktime(12,0,0,5,31,2019))."<br/>";

// 距離國慶節還有多少天,單位秒 : 今天是2019-05-31,距離國慶節還剩122天
$nationalDay = mktime(0,0,0,10,1,2019);
$currentDay = time();
$remainingDay = floor(abs($nationalDay - $currentDay)/(24*3600));
echo "今天是".date("Y-m-d").",距離國慶節還剩".$remainingDay."天<br/>";
?>
strtotime : 將任何字符串的日期時間描述解析爲 Unix 時間戳
  • 場景

將英文日期解析成時間戳,比直接解析日期方便,採用自然語義而不是編程語言進行轉換日期.

  • 說明

本函數預期接受一個包含美國英語日期格式的字符串並嘗試將其解析爲 Unix 時間戳(自 January 1 1970 00:00:00 GMT 起的秒數,其值相對於 now 參數給出的時間,如果沒有提供此參數則用系統當前時間.

  • 常用格式
// 2019-06-02
echo date("Y-m-d", strtotime("2019-05-31 +2 days"));

// 2019-07-01
echo date("Y-m-d", strtotime("2019-05-31 +1 month"));

// 2019-06-09
echo date("Y-m-d", strtotime("2019-05-31 +1 week 2 days 4 hours 2 seconds"));
  • 示例
<?php
// 設置當前時區爲上海時區
date_default_timezone_set("Asia/Shanghai");

// 獲取當前時區
echo "當前時區 : ".date_default_timezone_get()."<br/>";

// 當前日期時間戳
echo "當前日期時間戳: ".time()." <--> ".strtotime("now")." <--> ".date("Y-m-d H:i:s", strtotime("now"))."<br/>";

// 一週後的日期時間: 7 days; 24 hours; 60 mins; 60 secs
$nextWeek = time() + (7 * 24 * 60 * 60);
echo "現在是".date("Y-m-d H:i:s").",下週是".date("Y-m-d H:i:s",$nextWeek)." <--> ".date("Y-m-d H:i:s",strtotime("+1 week"))."<br/>";

echo "現在是".date("Y-m-d H:i:s").",1周2天4小時2秒是".date("Y-m-d H:i:s",strtotime("+1 week 2 days 4 hours 2 seconds"))."<br/>";

echo "現在是".date("Y-m-d H:i:s").",下週三是".date("Y-m-d H:i:s",strtotime("next Thursday"))."<br/>";
?>

日期時間函總結

日期時間函數庫是 php 內置的函數庫,默認情況下已啓用,值得注意的是,日期時間和時區有關,建議首先設置下時區.

縱觀日期時間的操作方法,總的來說,可以大致分爲兩類,一類是給計算機用的,另一類是給人看的.

  • 給人看的

    • date_default_timezone_set("Asia/Shanghai") : 設置當前腳本使用的時區
    • date("Y-m-d H:i:s") : 格式化日期時間
    • date("Y-m-d", strtotime("2019-05-31 +2 days")) : 格式化英文描述的日期時間
  • 給計算機用的

    • time() : 當前時間的秒數
    • microtime() : 當前時間的秒數和微秒數
    • strtotime() : 將字符串形式的日期時間轉換成時間戳

最後,文檔那麼齊全,不懂就去多看看,忘記有啥方法全靠 ide 智能提示就好,多用用就會慢慢熟練.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章