1

私は本当に面白い問題に直面しました。私のサーバーのタイムゾーンはAmerica/New_Yorkに設定されており( に示されphpinfo()、 の戻り値date_default_timezone_get())、現在はニューヨークで午後 23:30 ですが、使用するecho date(h:i)と 7:30 AM と表示され、8 時間のオフセットが表示されます!

サーバーのシステム時刻も午前 7 時 30 分と表示され、デフォルトのタイムゾーンが php.ini に設定されていません

ご協力いただきありがとうございます

4

2 に答える 2

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
于 2012-11-26T04:53:23.113 に答える
0

私自身、この記事http://abdussamad.com/archives/343-CentOS-Linux:-Setting-timezone-and-synchronizing-time-with-NTP-.htmlが私の場合に非常に役立ち、うまく機能しました。

他の友人が述べたように、サーバーの時刻を修正し、サーバーのタイムゾーンと同期させる必要があります。

于 2012-11-26T05:27:48.620 に答える