2011-09-03 117 views
3

我不知道爲什麼strtotime()在PHP中返回不同的結果在不同的時區,即使相同的日期作爲參數給出,沒有人知道答案嗎?我也想知道,是否可以執行類似的任務(將datetime轉換爲int以便輕鬆進行計算)和另一個在不同時區給出相同結果的函數?爲什麼strtotime在不同的時區給出不同的結果?

編輯:

一個例子: 如果我使用strtotime('2011-09-19 00:00:00')不應該只是返回秒'January 1 1970 00:00:00''2011-09-19 00:00:00'之間的區別?爲什麼時區在這裏是個問題?我可以得到一些不帶時區問題的差異嗎?

+5

因爲不同時區的時間不同, –

+0

你能提供一些你想要做的事嗎? –

+0

@jeffamaphone我給出了相同的日期時間作爲參數,它不應該將它轉換爲int,與時區有什麼關係,這是我想知道的嗎? – Usman

回答

7

簡而言之:時區被認爲是因爲Unix時代值被認爲是GMT。

在更廣泛的意義2011-09-19 00:00:00談到孟加拉國6小時它是在GMT區2011-09-19 00:00:00經過近。由於這一差距,在BD中出現同一日期時,格林威治標準時間區域又過了21600秒。

由於計算是根據GMT完成的,所以您必須添加這些21600秒以獲得實際差異。

6

strtotime給出了在不同的時區不同的結果,因爲它需要的時區考慮......

strtotime's manual

函數需要接受一個包含英語日期格式,並會嘗試將字符串將該格式解析爲Unix時間戳(自1970年1月1日00:00:00 UTC以來的秒數)

此函數將使用TZ環境變量(如果可用)計算時間戳。自PHP 5.1.0起,有更簡單的方法來定義所有日期/時間函數中使用的時區。該過程在date_default_timezone_get()功能頁面中進行了解釋。

看一看mktime()

自PHP 5.1起,您可以在致電mktimestrtotime之前使用date_default_timezone_set

+0

謝謝,我只是好奇,如果我使用strtotime('2011-09-19 00:00:00')不應該只是返回'1970年1月1日00:00:00'和'2011-09之間的區別-19 00:00:00'?爲什麼時區在這裏是個問題?我可以得到一些只有差別的東西嗎? – Usman

+0

爲mktime()+1,但它需要參數在幾個部分,這是一個痛苦:( – Usman

1

從PHP手冊:

該函數將使用TZ環境變量(如果有的話)來計算時間戳。自PHP 5.1.0起,有更簡單的方法來定義所有日期/時間函數中使用的時區。該過程在date_default_timezone_get()函數頁面中進行了解釋。

http://php.net/manual/en/function.strtotime.php

+0

謝謝,我已經更新了一個例子的問題,請看看 – Usman

1

PHP docsstrtotime

該功能將使用TZ環境t變量(如果可用)至 計算時間戳。自PHP 5.1.0起,有更簡單的方法可以定義在所有日期/時間函數中使用的時區。在date_default_timezone_get()函數頁面中說明了 進程。

嘗試setting your own time zone

+0

謝謝,我用一個例子更新了這個問題,請看看。 – Usman

0

我想大概每個php程序員都會有一次這個函數會讓他真的想明白php實際上是如何處理日期和時間函數的。

有趣的是,當你嘗試像...... err這樣的功能......例如,假設今天在這個時刻是2012年7月11日的13:00:00(2012-07-11 13:00: 00),然後你嘗試的strtotime準確地找到了一天的同一時刻,但明天:

$x = strtotime('2012-07-12 13:00:00'); 

$y = strtotime('+1 Day'); 

$z = $x-$y; 

$ x和上述第2行的$ Y甚至不會返回同樣的事情,你忽略分鐘第二次計數,但如果您的服務器在美國的某個地方,格林威治標準時間爲-5小時,但您的瀏覽器在夏季時間從柏林呼叫此功能,那麼$ z將在25200或7小時左右,其中GMT +2小時...大聲笑現在你可以知道PHP如何使用這個功能;)

+0

這並不能解決問題。 –

相關問題