まず、jsTimezoneDetectは、ユーザーのタイムゾーンを推測するためにのみ使用する必要があります。正しくない可能性があるため、またユーザーが実際にいるタイムゾーンとは別のタイムゾーンを使用したい場合があるため、ユーザーが構成できる必要があります。少なくとも、ユーザーがログインするシステムがある場合、またはユーザーは時間を入力しています。
物事を表示しているだけの一時的な訪問者の場合、ユーザーがたまたまいるタイムゾーンで時間を表示することは問題ありませんが、jsTimezoneDetectが間違ったタイムゾーンを推測し、夏時間のルールが異なると、1時間間違える可能性があります。jsTimezoneDetectの推測に依存している場合は、ユーザーが推測しているタイムゾーンを明確に表示するようにしてください。
次に、UTC日付をユーザーが構成した(またはjsTimezoneDetectが推測した)タイムゾーンに変換する必要があります。これを行うには、PHPがサポートしているzoneinfo / tz / Olsenデータベース(1つのデータベース、多くの名前)を使用します。
私が見つけることができるPHPでこれを行うためのほとんどのレシピは、php全体のタイムゾーンを設定してから、日付をフォーマットすることを含みます。それをしないでください、それは正気ではありません、phpのタイムゾーンを常にあなたのシステムのタイムゾーンと同じに保ってください。
代わりに、DateTimeライブラリのDateTimeZoneオブジェクトがあり、DateTimeのタイムゾーンを設定してフォーマットするためのサポートがあります。それが前進する方法です。
だからあなたはこのようなことをすることができます。まず、データベースから取得したデータを使用してUTCでDateTimeオブジェクトを作成します。
php > $date = new DateTime('2000-01-01', new DateTimeZone('UTC'));
php > echo $date->format('Y-m-d H:i:sP') . "\n";
2000-01-01 00:00:00+00:00
次に、それをユーザーのタイムゾーンに変換できます。
php > $date->setTimezone(new DateTimeZone('Pacific/Chatham'));
php > echo $date->format('Y-m-d H:i:sP') . "\n";
2000-01-01 13:45:00+13:45
または別のもの:
php > $date->setTimezone(new DateTimeZone('US/Eastern'));
php > echo $date->format('Y-m-d H:i:sP') . "\n";
1999-12-31 19:00:00-05:00