/ / PHP:サーバーのタイムスタンプをユーザーのタイムゾーンに変換する方法を教えてください。 - php、タイムゾーン、タイムスタンプ

PHP:サーバーのタイムスタンプをユーザーのタイムゾーンに変換するにはどうすればよいですか? - PHP、タイムゾーン、タイムスタンプ

私は現在 "time()"を使って時間を保存していますデータベースの機能。ただし、サーバーのタイムゾーンを使用しているので、各ユーザーが自分のタイムゾーンに従ってプロファイルを確認することができます(プロファイルで設定)。

タイムスタンプ変換はどのようにして行えますか? (そして、私はタイムスタンプからタイムスタンプまでを意味します、読解可能時間までではない

回答:

回答№1については9

Joonasが述べたように、UNIXのタイムスタンプは定義上UTCですが、本当に必要な場合は、タイムゾーン固有のタイムスタンプを模倣するためにこのようなものを一緒にハッキングすることができます。

// PHP 5.3 - OO Code
$timestamp = time();
echo "Unix timestamp: " . $timestamp;
$dt = DateTime::createFromFormat("U", $timestamp);
$dt->setTimeZone(new DateTimeZone("America/New_York"));
$adjusted_timestamp = $dt->format("U") + $dt->getOffset();
echo " Timestamp adjusted for America/New_York: " . $adjusted_timestamp;

// PHP 5.3 - Procedural Code
$timestamp = time();
echo "Unix timestamp: " . $timestamp;
$dt = date_create_from_format("U", $timestamp);
date_timezone_set($dt, new DateTimeZone("America/New_York"));
$adjusted_timestamp = date_format($dt, "U") + date_offset_get($dt);
echo " Timestamp adjusted for America/New_York: " . $adjusted_timestamp;

回答№2については2

実際には、タイムスタンプ自体をハックして日付を変更するべきではありません。フォーマットされた日付スタンプをユーザーに提示する前に、タイムゾーンにタイムゾーンを適用する必要があります。

これはPHP 5> = 5.2.0で動作するはずのMikeのコードの修正版です。 に見られるように php.net

// OO Code
$st = 1170288000 //  a timestamp
$dt = new DateTime("@$st");
$dt->setTimeZone(new DateTimeZone("America/New_York"));
$adjusted_timestamp = $dt->format("U") + $dt->getOffset();
echo " Timestamp adjusted for America/New_York: " . $adjusted_timestamp;

// Procedural Code
$st = 1170288000 //  a timestamp
$dt = date_create("@$st");
date_timezone_set($dt, timezone_open("America/New_York"));
$adjusted_timestamp = date_format($dt, "U") + date_offset_get($dt);
echo " Timestamp adjusted for America/New_York: " . $adjusted_timestamp;

回答№3の場合は1

UNIXのタイムスタンプはUTCで定義されています。つまり、すべての変換は実際のタイムスタンプではなく印刷する直前に行われるべきです。

ただし、これを行う方法は、現在のフォーマット方法によって異なります。PHPにはタイムゾーン処理が組み込まれていると思います。