我遇到了一个非常有趣的问题。我的服务器时区设置为 America / New_York (如phpinfo()
中所示,并返回值date_default_timezone_get()
),现在是纽约时间23:30 PM但是在使用时{ {1}}它显示我7:30 AM,偏移8小时!
我的服务器系统时间也显示在上午7:30,并且未在php.ini中设置默认时区
感谢您的帮助
答案 0 :(得分:4)
听起来很简单。
根据您的问题的评论,修复服务器上的时间,PHP将报告正确的时间。
如果您的服务器设置在America / New_York时区,并且PHP也设置为America / New_York,也就是说,如果服务器偏移量与PHP的偏移量匹配,PHP将只输出服务器的时间。
你可能假设PHP的date()函数从时间服务器或其他东西获取当前时间;事实并非如此。
在写完答案的最后一部分之后,我想知道如何从NTP时间服务器获取时间,例如time.apple.com
<?php
function ntp_time($host) {
// Create a socket and connect to NTP server
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_connect($socket, $host, 123);
// Send request
$msg = "\010" . str_repeat("\0", 47);
socket_send($socket, $msg, strlen($msg), 0);
// Receive response and close socket
socket_recv($socket, $recv, 48, MSG_WAITALL);
socket_close($socket);
// Interpret response
$data = unpack('N12', $recv);
$timestamp = sprintf('%u', $data[9]);
// NTP is number of seconds since 0000 UT on 1 January 1900
// Unix time is seconds since 0000 UT on 1 January 1970
$timestamp -= 2208988800;
return $timestamp;
}
// Get America/New_York time from time.apple.com
date_default_timezone_set('America/New_York');
echo date('Y-m-d H:i:s', ntp_time('time.apple.com'));
//=> 2012-11-25 23:59:02
答案 1 :(得分:0)
我自己发现这篇文章http://abdussamad.com/archives/343-CentOS-Linux:-Setting-timezone-and-synchronizing-time-with-NTP-.html在我的案例中非常有用,对我来说很好。
正如其他朋友提到的那样,服务器时间应该更正并与服务器时区同步。