Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
显示错误时间的php日期函数_Php_Timezone - Fatal编程技术网

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

显示错误时间的php日期函数,php,timezone,Php,Timezone,我遇到了一个非常有趣的问题。我的服务器时区设置为美国/纽约(如phpinfo()和date\u default\u timezone\u get()的返回值所示),现在纽约是晚上23:30,但当使用回显日期(h:i)时,它会显示我上午7:30,偏移8小时 我的服务器系统时间也显示为上午7:30,php.ini中未设置默认时区 谢谢你的帮助听起来很简单 根据对问题的评论,确定服务器上的时间,PHP将报告正确的时间 如果您的服务器设置为America/New_York时区,并且PHP也设置为Amer

我遇到了一个非常有趣的问题。我的服务器时区设置为美国/纽约(如
phpinfo()
date\u default\u timezone\u get()
的返回值所示),现在纽约是晚上23:30,但当使用
回显日期(h:i)
时,它会显示我上午7:30,偏移8小时

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

谢谢你的帮助

听起来很简单

根据对问题的评论,确定服务器上的时间,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
听起来很简单

根据对问题的评论,确定服务器上的时间,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

我自己发现这篇文章在我的情况下非常有用,对我来说效果很好


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

我自己发现这篇文章对我的情况非常有用,对我来说效果很好


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

当你在终端中执行
date
时会发生什么?你是否可能更改了时区,但没有更新服务器的实际时间?@TheSmose:我说它也显示上午7:30,第二个问题是什么意思?我从未修改过我的服务器时间和时区您的计算机认为它在哪个时区,它实际上在哪个时区?@ali如果您的服务器认为它在纽约时区,并给出上午7:30,那么为什么PHP不应该设置正确的服务器时间?@ali在终端中执行
date
时会发生什么?你是否可能更改了时区,但没有更新服务器的实际时间?@TheSmose:我说它也显示上午7:30,第二个问题是什么意思?我从未修改过我的服务器时间和时区您的计算机认为它在哪个时区,它实际上在哪个时区?@ali如果您的服务器认为它在纽约时区,并给出上午7:30的时间,那么为什么PHP不应该?@ali设置正确的服务器时间。好的,我的服务器操作系统是centOS。你能告诉我怎么做吗?+1是的,这是服务器配置过程中的常见问题。好的,我的服务器操作系统是centOS。你能告诉我怎么做吗?+1是的,这是服务器配置过程中的常见问题。