2011-09-27 138 views
0

這是我目前的代碼,似乎不能正常工作。這段代碼如何工作?什麼是正確的代碼

echo date("h:i", 1*60*60) ; /* 1*60*60 mean 1 hours right */

結果是03:00時,它應該是01:00。

這是怎麼回事?

我想這樣做

1-員工進來時管理員選擇它

2-員工來 - 離開保存在MySQL作爲時間戳

現在,我試圖讓管理員看到 多少小時用戶後期的意思

用戶日期時間晚默認

USER1 2011年11月9日9時10 09:00 10分鐘

USER1 2011年12月9日08:00 09:00 -60分鐘

+1

你想做些什麼發生在我身上?你可以傳遞參數到'date()'來清理你的數據/時間 – Mob

+0

沒有時區沒有使用,如何使用它像這樣的代碼 – SamarLover

+2

[''echo date_default_timezone_get();'](http:// php。 net/manual/en/function.date-default-timezone-get.php)給出了? – Gordon

回答

5

如果你輸出的只是date("Y-m-d H:i:s",0)你應該看到它不是1970-01-01 00:00:00,因爲它應該是。這是因爲date受當地時區影響。例如我在GMT + 3,並且date("Y-m-d H:i:s")給我1970-01-01 03:00:00

所以,答案是你不在格林尼治標準時區(可能在格林尼治標準時間+2),date受它影響。

UPDATE

下面的代碼輸出1970-01-01 00:00:00,所以這絕對是個時區。

date_default_timezone_set('UTC'); 
echo date("Y-m-d H:i:s", 0); 

Hovewer,我不能在PHP的date手冊中看到任何提及。

+0

不是'date()'默認使用當前時間戳嗎? – Phil

+2

實際上,'date(「Y-m-d H:i:s」)'(沒有第二個參數)默認爲當前時間(time()的值),而不是UNIX紀元。 – bfavaretto

+0

@菲爾,它的確如此。 :)'...使用給定的整數時間戳或當前的時間,如果沒有時間戳給出 – J0HN

0

date()函數的第二個參數必須是UNIX timestamp,秒從1970年1月1日通過。你需要根據這個價值做出時間。

+0

是的,這是正確的,我認爲時間戳從0開始 – SamarLover

+0

是的,但從1970年1月1日:) – antyrat

+1

@戈登你是對的,我編輯了我的答案。 – antyrat

0

錯誤,如果我是正確的,date()的第二個參數是unix時間戳,所以秒數自1970年以來。 您必須獲取time()並將60 * 60添加到它。

echo date("h:i", time()+60*60); // get current timestamp, add one hour 
0

您可能沒有設置time zones,如果省略,應該會產生PHP警告或通知。

+2

我認爲是相反的。它看起來像OP的服務器配置爲GMT + 2 – Phil

1

問題是由於您的時區(看起來像GMT + 2)。

PHP中的日期計算基於配置的服務器時區。例如我的顯示

$ php -r 'echo date("h:i", 3600), PHP_EOL;' 

11:00 
+0

是的,這是正確的,現在我的腳本在埃及工作+2如果腳本轉移到美國(例如+6)如何使我的代碼在任何地方工作 – SamarLover

0

這是什麼SamarLover認爲他想要的是

gmdate("h:i", 1 * 60 * 60); 
+0

謝謝@Cameron萊爾德,你的答案是非常好的,我也會用它:) – SamarLover

+0

不客氣,SamarLover;我很高興明確地知道這對你有幫助。 –