php日期函数显示错误的时间

时间:2012-11-26 04:36:07

标签: php timezone

我遇到了一个非常有趣的问题。我的服务器时区设置为 America / New_York (如phpinfo()中所示,并返回值date_default_timezone_get()),现在是纽约时间23:30 PM但是在使用时{ {1}}它显示我7:30 AM,偏移8小时!

我的服务器系统时间也显示在上午7:30,并且未在php.ini中设置默认时区

感谢您的帮助

2 个答案:

答案 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在我的案例中非常有用,对我来说很好。

正如其他朋友提到的那样,服务器时间应该更正并与服务器时区同步。

相关问题