iT邦幫忙

2021 iThome 鐵人賽

DAY 18
0
Software Development

PHP 語法通關系列 第 18

Day18 PHP的常用函數3:時間函數

時間函數

世界各國表示時間的方式不一樣,存儲不方便,計算不方便,不同的時間表示方式影響,不利於溝通和計算。
因此電腦中統一時間的方式是使用Unix時間戳。

  • 什麼是時間戳呢?

    • 之前:從1970年1月1日0時0分0秒開始到指定時間的秒數,時間戳屬於整型數據類型,PHP的時間戳從1970年開始最大表示到2038年1月19日(32位)
    • 準確:有效的時間戳典型範圍是格林威治時間 1901 年 12 月 13 日 20:45:54 到 2038 年 1 月 19 日 03:14:07。 (此範圍符合 32 位有符號整數的最小值和最大值)。
  • time():獲取當前時間的時間戳,返回當前時間戳int

  • date():格式化(轉換成你能看懂的格式)時間戳

    • 格式化時間字符常用:
      Y - 4位數的年
      d - 2位數的天
      m - 2位數的月份
      H - 小時 24小時格式
      m - 分鐘 00-59
      s - 秒數 00-59
<?php
//time()  
$time = time();
var_dump($time);
echo '<hr>';

//date() 
//@param1 時間格式字符
//@param2 可選參數,該參數為要格式化的時間戳,如果沒有設定,那麼默認是當前時間戳

$str = date('Y-m-d H:i:s'); //格式化當前時間
var_dump($str);
echo '<hr>';

//設定時間戳
$str = date('Y年m月d日 a:H-i-s', 1899484572); //格式化當前時間
var_dump($str);

  • 服務器默認的時間都是國際統一時間(格林威治時間),所以在使用服務器時需要設置當前服務器時區位於用於指定的時區
    1. 設定方法1:修改PHP配置文件 PHP.INI
      查找: ;date.timezone = ''
      設置選項:date.timezone = 大洲/城市
      PS. 1.必須在支持的時區列表中選取。
      2.設置之後必須重啟apache.
[Date]
date.timezone = "Asia/Taipei"
  1. 設置方法2:修改PHP配置文件 php.ini
    查找:date.timezone = 'ETC/GMT-8';
    注意:必須在支持的時區列表中選取。
    設置之後必須重啟apache

  2. 使用函數修改當前頁面的時間
    使用date_default_timezone_set()函數來設置時區,其參數和配置文件中的date.timezone的值一樣,現實中使用該方法時,會在每個頁面的開始部分包含並且運行該函數。

    • date_default_timezone_set():通過函數設置當前頁面的時區
  • getdate():獲取當前時間(返回一個數組,參數年,月,日等都有)
  • micritime():獲取當前時間(返回毫秒的時間戳)
  • mktime(H,i,s,m,d,Y):指定時間轉為時間戳,參數為空的時候作用與time()相同(返回時間戳格式)
<?php
$date = getDate();
var_dump($date);
$timeUnix = mktime(10, 2, 5, 11, 5, 2021);
var_dump($timeUnix);
echo '<hr>';
$date = date('Y-m-d H:i:s', $timeUnix);
var_dump($date);
echo '<hr>';
$timeUnix = mktime(25, 80, 100, 15, 32, 2021);
var_dump($timeUnix);
echo '<hr>';
$date = date('Y-m-d H:i:s', $timeUnix);
var_dump($date);
echo '<hr>';
//2021 4 月  12日  
$timeUnix = mktime(0, 0, 0, 4, 12, 2021);
var_dump($timeUnix);
echo '<hr>';
$date = date('Y-m-d H:i:s', $timeUnix);
var_dump($date);

有一個時間常用的方式是這支程式運行多久,因此以下寫一個例子:

<?php
//求執行時間
//1.獲取開始時間
$startUnix = microtime(true);
for ($i = 0; $i < 1000000; $i++) {
	# code...
}
//睡覺 ~~讓程式睡覺 ,參數以秒為單位
//sleep(10);

//2.得到結束時間
$endUnix = microtime(true);
//3.結束時間 -  開始時間 = 執行時間
$queryUnix = $endUnix - $startUnix;
echo '當前頁面一共運行了' . round($queryUnix, 2) . '秒';

Day18 Winnie的聊天室

今天聊了時間,其實時間一直都是程式中很重要的一環,要知道一個程式執行多久就是效率!
效率:

  • 程式運行時間少
  • 程式佔據的內存少
    但是實際測試會有一些限制,例如電腦配備、環境等,不過也是有方式解決的,雖然我還沒有進階到那種程度,無法分享,但有一天一定能來分享!

上一篇
Day17 PHP的常用函數-2:數組
下一篇
Day19 PHP的常用函數-4:文件處理函數、Json
系列文
PHP 語法通關30

尚未有邦友留言

立即登入留言