タイムゾーンをいじる代わりに、なぜそうしないのですか
ALTER TABLE `your_table`
CHANGE `date_added` `date_added`
TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
これは変更されますDATE列からTIMESTAMP列への列 、プロセスですべての日付をそれぞれのUTCタイムスタンプに変換します。
新しい行が挿入されると、現在のタイムスタンプが使用されます値として 。タイムスタンプは常にUTCであるため、MySqlサーバーのタイムゾーンを変更したり、新しい行を挿入するときに日付を指定したりする必要はありません。
列を変更できない、または変更したくない場合は、
からタイムスタンプを選択することもできます。SELECT UNIX_TIMESTAMP('date_added') FROM your_table;
TimeAgoの場合は、次のようにすることができます
$now = new DateTime;
$dateAdded = new DateTime("@$yourTimestampFromDb");
$dateAdded->setTimezone($now->getTimezone());
$timeSinceAdded = $dateAdded->diff($now);
DateTimeにタイムスタンプを指定すると、デフォルトのサーバータイムゾーン設定に関係なく、常にUTCが使用されます。したがって、$dateAdded
を変換する必要があります (上記のように)デフォルトのタイムゾーンに変換するか、$timeSinceAdded
を変換します UTCに。
dateTimeを現在アクセスしているユーザーのタイムゾーンに変更するには、次のいずれかを行います。
- この情報をデータベースに保存する必要があります。登録ユーザーにこの情報の提供を求めているためです
- または 実行時に、通常はGeoIPルックアップを実行して決定します訪問しているユーザーのIP、またはユーザーのブラウザからDateTimeオフセットを送信します。
いずれの場合も、両方のDateTimeをそのタイムゾーンに変更するだけです。 これはsetTimezone()
を介して簡単に実行できます 。
$timeSinceAdded
その場合、DateInterval
になります オブジェクト、このように使用できます
echo $timeSinceAdded->format('%a total days');
利用可能なフォーマット修飾子などの詳細については、リンクを参照してください。