したがって、ここにシナリオがあります:イベントの相対時間
私のアプリケーションにはトランザクションセクションがあります。アクションを記録し、その時間をUNIXタイムスタンプ(UTC)として保管します。
昨日私は£100.00を支払った。これは1477762205のUNIXタイムスタンプでデータベースに記録された。土曜日は2016年10月29日17:30:05 UTC/GMT。
(PHPで書かれた)
私のアプリケーションdatetimeオブジェクトを使用して、出力のタイムゾーン(ヨーロッパ/ロンドン)に渡して出力する(これは私のために午後07時30分現地時間です)。
昨日、19時30分に現地時間が正しく出力され、今日の午前2時に時計時刻が変更されたため、18時30分になります。
これは技術的には正しいですが、最初にトランザクションをログに記録するときのイベントの相対的な位置を覚えていれば、19時30分現地時間であることを覚えていれば正しく表示されなくなります。
私の質問は、イベントに対してUTCから時間を出力する最も良い方法は何ですか?ログが発生した時点のタイムゾーンを判断するために、UTCログを使用してタイムゾーンを保存する必要がありますか?
コード:
ログを保存:
(これは私が作成していロガークラスの一部である)
if($dateTime == null) {
$dateTime = time();
}
$query = "INSERT INTO `".$this->databaseName."`.`log`(`datetime`,`action`) VALUES(?, ?);";
if(!$stmt = $this->database->prepare($query)) {
return $this->database->error;
}
$stmt->bind_param('ss',$dateTime,$action);
$stmt->execute();
これを出力:
$dateTime = new DateTime(null, new DateTimeZone('UTC'));
$dateTime->setTimestamp($log->timeStamp);
$dateTime->setTimezone(new DateTimeZone('Europe/London'));
echo $dateTime->format('d/m/Y H:i');
技術的に正しい出力:29/10/2016 18:30
しかし、実際のタイムスタンプに対してDSTを認識していることを表示することを願っています。
だから私は出力にそれを望む:すべての29/10/2016 19時30
UTC Unixのタイムスタンプはどういう意味ですか? –
非常に明確ではないので、意味の例を表示できますか? – vascowhite
さて、29日の19:30イギリス時間で、私はトランザクションを記録しました。 PHPのページに出力するとき:$ datetime = new DateTime(null、new DateTimeZone( 'UTC'); $ datetime-> setTimestamp($ timeStamp); echo $ datetime-> format(これはUNIXのタイムスタンプは1477762205でした。 $フォーマット); 前30thヨーロッパ/ロンドンの場合は1930として表示されますが、投稿30日後は1830として表示されます19:30と表示されますPHPがDSTを認識していないようですか? – DanTheDJ1