php,mysql之時區問題

Unix時間戳(Unix timestamp),或稱Unix時間(Unix time)POSIX時間(POSIX time),是一種時間表示方式,定義爲從格林威治時間19700101

000000秒起至現在的總秒數。

 

php設置時區(默認爲格林尼治時區):

date_default_timezone_set('Asia/Shanghai');//'Asia/Shanghai' 亞洲/上海

date_default_timezone_set('Asia/Chongqing');//其中Asia/Chongqing'爲“亞洲/重慶”

date_default_timezone_set('PRC');//其中PRC爲“中華人民共和國”

date_default_timezone_set("Etc/GMT")//GMT時區

php.ini配置文件的date.timezone

 

phptime()函數不管設置的時區是什麼,返回的都是相同的unix時間戳

date("Y-m-d H:i:s", time())此函數受時區影響,返回所在時區的當前時間

strtotime("2011-03-28 11:02:55")受時區影響,先計算出參數對應的格林尼治時間,然後以此格林尼治時間的時間戳作爲返回值

 

===============================================================================================

 

mysql設置時區(默認爲使用系統所在時區):

php函數:mysql_query("SET time_zone = '+8:00'")

my.cnfdefault-time-zone = '+8:00'

dosset time_zone = '+8:00';

 

mysql時間比較的問題:unix_timestamp()返回當前時間戳,也可以是unix_timestamp(field),其中字段field不能加引號,或者是

unix_timestamp("2011-03-28 14:11:48"); 或者是unix_timestamp("$php_variable");

 

unix_timestamp()函數是不會隨時區的不同而改變的。返回值跟phptime()函數一樣

unix_timestamp("2011-03-28 16:36:48")函數會隨時區改變,返回值跟phpstrtotime("2011-03-28 16:36:48")函數一樣

now()函數是會隨時區的設定而改變的,返回值跟phpdate("Y-m-d H:i:s", time())函數一樣

 

以下數據是我在深圳時間2011-03-28 16:17:19所做的測試:

mysql> set time_zone='+0:00';

Query OK, 0 rows affected (0.00 sec)

 

mysql> select now();

+---------------------+

| now()               |

+---------------------+

| 2011-03-28 08:17:19 |

+---------------------+

1 row in set (0.00 sec)

 

 

以下數據說明設置不同的時區,unix_timestamp()返回相同的值,unix_timestamp("2011-03-28 16:36:48")返回不同的值

mysql> set time_zone='+0:00';

Query OK, 0 rows affected (0.00 sec)

 

mysql> select unix_timestamp("2011-03-28 16:36:48");

+---------------------------------------+

| unix_timestamp("2011-03-28 16:36:48") |

+---------------------------------------+

|                       1301330208 |

+---------------------------------------+

1 row in set (0.00 sec)

 

mysql> select unix_timestamp();

+------------------+

| unix_timestamp() |

+------------------+

|       1301301748 |

+------------------+

1 row in set (0.00 sec)

 

mysql> set time_zone='+8:00';

Query OK, 0 rows affected (0.00 sec)

 

mysql> select unix_timestamp("2011-03-28 16:36:48");

+---------------------------------------+

| unix_timestamp("2011-03-28 16:36:48") |

+---------------------------------------+

|                       1301301408 |

+---------------------------------------+

1 row in set (0.00 sec)

 

mysql> select unix_timestamp();

+------------------+

| unix_timestamp() |

+------------------+

|       1301301780 |

+------------------+

1 row in set (0.00 sec)

發佈了26 篇原創文章 · 獲贊 12 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章