2013-07-07 63 views
0

我讀過很多關於我在這裏發佈的問題的文章,但我遇到了一個奇怪的問題。基於服務器時區動態打印時間

我已經設置我的PHP服務器時區爲"Asia/Bangkok"(只是一個例子)使用date.timezone指令php.ini文件,它工作得很好。根據設定的時間區

服務器返回正確的時候,我只是打印時間

<?php echo date("F j, Y, g:i A"); ?> 

但是,當我想動態打印一系列的時間,用戶輸入過程中輸入到mysql數據庫一樣,

<?php echo date("F j, Y g:i A", strtotime($row_entries['input_time']));?> 

服務器返回基於由主機設定的時區是Europe/Dublin(只是一個例子)的system時間。

我甚至試圖打印的時候沒有strtotime功能一樣,

<?php echo date("F j, Y g:i A",($row_entries['post_time']));?> 

返回異常/無效的日期。

這裏發生了什麼問題,以及如何根據我在php.ini中設置的服務器時區動態打印時間?

+0

數據庫中您試圖存儲數據的字段的數據類型是什麼?嘗試使用簡單的varchar來避免內部轉換。 –

+0

@OZ_我正在使用'timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP'。我猶豫使用'varchar'來存儲時間。謝謝, –

回答

1

看來,此行

$row_entries['post_time'] 

使用是不同

所以請你能發佈SQL在此列中插入數據MYSQL默認時區?

+0

我編輯了我的問題。我們可以考慮基於'$ row_entries ['input_time']'的糾正措施。謝謝, –

+0

我不知道你想說什麼! 但是當用戶輸入帖子時,你應該考慮設置時間行爲 $ row_entries ['input_time'] = date(「F j,Y g:i A」); 或者是時間 $ row_entries ['input_time'] = time(); 不要使用mysql now()函數! –

+0

你是正確的'$ row_entries ['post_time']'或'$ row_entries ['input_time']'使用MYSQL默認時區'(系統時間)''。我如何編輯共享unix服務器上的'mysql'中的時區?謝謝, –

0

我使用時間戳

1)使用int來存儲數字或VARCHAR文本或日期時間來存儲日期和時間。
2)閱讀有關此數據類型的默認行爲 - 將更新記錄中的任何其他字段時更新值。此數據類型只能用於記錄目的。

+0

我知道並意識到你說什麼,但我不想繞過爲相應字段分配的適當'datatype'。謝謝, –

+0

已更新。無論如何,時間戳是危險的類型,只有在您明白每次觸摸記錄時都會更新值時才應使用它。 –

+0

當然'timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'應在每次更新數據時更新該值。謝謝, –