php時間函數time()、date()、mktime()、strtotime()、date_...

php時間函數真的不少,有時候弄得人有點頭大,再加上php的好搭檔mysql自身也有時間處理函數,因此有必要深刻分析下時間函數。php處理時間的主要的幾個有time()、date()、mktime()、strtotime()、date_default_timezone_set(get)可能有的函數你們都很熟悉了,有的本身用的很少。下面咱們結合實際例子來說解下。php

好比如今我想用php時間函數獲得如今的時間,你可能會這樣寫。mysql

<?php
echo time();
?>

輸出一下看看,是一大串的數字,不是咱們想看到的時間格式效果,那這寫數字是什麼東東呢?這個就是咱們不怎麼了解的UTC時間,它是怎麼計算的呢?它是格林威治時間 即1970 年 1 月 1 日 00:00:00 到當前時間的秒數,若是你再不明白,我再給你說的透一點,它就是如今的時間減去1970.1.1 00:00:00 而後把它們的差化成秒爲單位的數值就是咱們如今輸出的值了。sql

咱們獲得的UTC時間可能咱們知道怎麼再轉換過來,可是別人不知道啊,因此,咱們要給這個UTC時間轉換下格式,讓它成爲咱們能看的懂的時間,那麼如今你能夠選擇date()函數。函數

<?php
echo date(‘」Y-m-d H:i:s」);
?>

上面的一句代碼會輸出什麼呢?運行下,好了,格式咱們能夠懂了,可是不是說這個函數是格式化函數嗎?怎麼也能獲得時間呢?呵呵 這個函數的第二個參數我沒有寫出來,第二個參數是一個UTC參數串,若是不給,那麼就會默認輸出time()的格式化時間,在這裏咱們不想輸出當前的時間,咱們想輸出2012-12-21號世界末日的時間,怎麼輸出呢,這時候咱們能夠用mktime()函數了。spa

<?php
echo date(「Y-m-d H:i:s」,mktime(0,0,0,12,21,2012));
?>

這樣輸出來  就是你要的時間了,mktime()函數根據你輸入的格式返回一個UTC時間,可是必定要記住參數的順序,小時-分鐘-秒-月-日-年。操作系統

細心的朋友必定發現了,我用date去格式化如今的時候,輸出的不是如今的時間啊,比如今的時間晚八個小時啊。這就是咱們所說的時差了,UTC時間是根據格林威治,就是這個地方把地球分爲了東西兩部分,咱們在東八區,按照地理知識咱們應該是這個地方快8個小時,因此,咱們的函數就出現了「錯誤」,少給咱們加了8個小時。code

怎麼避免上面的現象發生呢,很簡單就是用到了這個函數,date_default_timezone_set()get

咱們能夠先來看下咱們這個地方時區是怎麼設定的ast

<?php
echo  date_default_timezone_get();
?>

輸出的是「UTC」,說明咱們是按照格林威治時間計算的,這個函數是會通過判斷後才得出你所在的地方應該按照什麼來計算你的時間。判斷的前後以下:class

1:用 date_default_timezone_set() 函數設定的時區(若是設定了的話)

2:TZ 環境變量(若是非空)

3:date.timezone 配置選項(若是設定了的話)

4:本身推測(若是操做系統支持)

5:若是以上選擇都不成功,則返回 UTC

咱們能夠從條件中看到,咱們能夠用date_default_timezone_set()這個函數來設定咱們所在的時區,

<?php
date_default_timezone_set(「Etc/GMT-8″);
echo date(「Y-m-d H:i:s」);
?>

運行上面的代碼 是否是就是你想要的時間了。date_default_timezone_set()這個函數的參數能夠去找下資料,我就不一一講解了,大部分咱們主要用的是Etc/GMT-8 即東八區。

好了上面的函數你可能瞭解的差很少了,下面咱們來了解一個比較人性化的函數 strtotime(),爲何說它人性化呢,看了下面就知道了

<?php
echo strtotime("now"), "\n";
echo strtotime("10 September 2000"), "\n";
echo strtotime("+1 day"), "\n";
echo strtotime("+1 week"), "\n";
echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";
echo strtotime("next Thursday"), "\n";
echo strtotime("last Monday"), "\n";
?>

呵呵,是否是很智能呢,你給他一個指令 他就能輸出時間,固然這個時間仍是UTC時間戳。

好了,php的大部分時間函數就這麼多了,有空的話,我會寫一篇mysql的時間函數的分析。

相關文章
相關標籤/搜索