2

以下のコードを適応させて、ユーザーのタイムゾーンを相殺する方法を見つけようとしています。

function now($format = 'Y-m-d H:i:s'){
    return @date($format,mktime());
}

以下でこれを使用して現地時間を調整しました

function now($format = 'Y-m-d H:i:s'){
    return @date($format,mktime() -3600);
}

しかし、ユーザーに合わせて動的に調整する必要があります。

編集:ユーザーにフォームのドロップダウンを介してタイムゾーンを定義させ、「America/Los_Angeles」などのDBに保存します。

何か案は?

4

1 に答える 1

1

PHPが提供するDateTimeオブジェクトを使用することはおそらく非常に良い考えです。タイムゾーンも処理することを約束します。

// Current date/time in the specified time zone.
$date = new DateTime(null, new DateTimeZone('Pacific/Nauru'));
echo $date->format('Y-m-d H:i:sP') . "\n";

(ドキュメントページhttp://de3.php.net/manual/en/datetime.construct.phpからのコード)

選択したタイムゾーンに関する情報を取得するために、DateTimeZoneは、次のような方法でタイムゾーンデータベース情報へのアクセスを提供しますgetTransitions()(既知の時間ごとのオフセットを含む配列を取得します。http://de3.php.netの例を参照してください)。 /manual/en/datetimezone.gettransitions.php)、およびgetOffset()(オフセットが要求される時間を必要とします。http://de3.php.net/manual/en/datetimezone.getoffset.phpを参照してください

つまり、基本的に「秒単位のオフセット」などはありません。この値は、a)要求する時間、夏時間などが時間の経過とともに影響するため、b)要求する時間によって変化するためです。タイムゾーンの変更は、変更できない自然法ではなく、地域の法律の影響を受けるためです。

あなたは必要に応じて現地時間に変換できる普遍的な時間を保存する正しい方法にいますが、私はそれを自分でやろうとするのではなく、PHPが提供するものを利用することをお勧めします。コーディングにかかる​​時間が短縮されます。

于 2012-10-09T23:00:17.727 に答える