我在系統和PHP之間得到不同的日期/時間。PHP和系統日期不同
系統:
$ date
Tue Nov 3 19:16:51 EAT 2015
PHP:
echo date("D M j G:i:s T Y");
-> Tue Nov 3 16:16:23 UTC 2015
似乎PHP被默認爲UTC即使系統中有不同的時區。我如何讓PHP選擇系統日期/時間?
注意:由於維護原因,我避免對時區進行硬編碼。
謝謝。
我在系統和PHP之間得到不同的日期/時間。PHP和系統日期不同
系統:
$ date
Tue Nov 3 19:16:51 EAT 2015
PHP:
echo date("D M j G:i:s T Y");
-> Tue Nov 3 16:16:23 UTC 2015
似乎PHP被默認爲UTC即使系統中有不同的時區。我如何讓PHP選擇系統日期/時間?
注意:由於維護原因,我避免對時區進行硬編碼。
謝謝。
似乎有越來越系統日期/時間在PHP中的不容易(系統無關)的方式,但是這似乎工作:
$timezone = 'UTC';
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
$timezone = exec('tzutil /g');
} else {
$timezone = exec('date +%Z');
}
$localTimezone = new DateTimeZone($timezone);
$myDateTime = new DateTime(date(), $localTimezone);
echo ($myDateTime->format('D M j G:i:s T Y'));
我還沒有在Windows上進行測試,但在Linux上工作。
在您的文件頂部嘗試輸入。
date_default_timezone_set('Country');
例子:date_default_timezone_set('Hongkong');
這意味着硬編碼tmezone,我試圖避免。 –
理想情況下,你應該配置每個服務器的php.ini
其中date.timezone
可設置:
; ...
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = 'America/Chicago'
; ...
接受的時區列表可以在PHP manual找到。
如果你寧願把它放在每個腳本這裏是設置它獨立於平臺的功能:
<?php
function setTimezone($OSXPassword = null){
$timezone = null;
switch(true){
//Linux (Tested on Ubuntu 14.04)
case(file_exists('/etc/timezone')):
$timezone = file_get_contents('/etc/timezone');
$timezone = trim($timezone); //Remove an extra newline char.
break;
//Windows (Untested) (Thanks @Mugoma J. Okomba!)
case(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'):
$timezone = exec('tzutil /g');
break;
//OSX (Tested on OSX 10.11 - El Capitan)
case(file_exists('/usr/sbin/systemsetup')):
if(!isset($OSXPassword)){
$OSXPassword = readline('**WARNING your input will appear on screen!** Password for sudo: ');
}
$timezone = exec("echo '" . $OSXPassword ."' | sudo -S systemsetup -gettimezone");
$timezone = substr($timezone, 11);
break;
}
if(empty($timezone)){
trigger_error('setTimezone could not determine your timezone', E_USER_ERROR);
} else {
date_default_timezone_set($timezone);
}
return $timezone;
}
setTimezone();
?>
正如你所知道的,對OSX的支持是粗略的。
在OSX上獲取時區的唯一體面方式是通過systemsetup
這需要超級用戶才能運行。我真的討厭在PHP腳本中存儲根密碼的做法,但我已包含完整性選項 - 謹慎使用,這是一個安全漏洞。在OSX上,如果沒有提供root密碼,腳本將嘗試從用戶輸入中獲取它。
使用['date_default_timezone_set()'](http://php.net/manual/en/function.date-default-timezone-set.php)設置默認時區 –
我仍然獲得PHP日期/時間在UTC甚至在valling'date_default_timezone_set()' –
可能重複[如何獲取本地系統時間在PHP?](http://stackoverflow.com/questions/2329467/how-do-i-get-the-本地系統時間在PHP) – HPierce