ユーザー レコードに対してユーザー ゾーンを保存するスタック オーバーフローのさまざまな例を使用して、CakePHP アプリ用のシンプルなタイムゾーン ヘルパーを作成しました。例: ヨーロッパ/ロンドン。
ヘルパーを表示するには: http://pastebin.com/VGivwqHJ
ユーザーがアプリケーションにログインすると、セキュリティ上の理由からユーザーにログのリストを表示できるように、ログインした日時を保存します。例: $this->User->saveField('lastlogin', date('Ymd H:i:s'));
ただし、その日付は現在サーバーの日付/時刻を取得します。ユーザーのタイムゾーンを使用して修正するにはどうすればよいですか?
私は試した:
$date = new DateTime(null, new DateTimeZone($user['User']['timezone']));
そして:$this->User->saveField('lastlogin', $date->date);
しかし、私はnullになるだけです...
しかし、 $date をデバッグすると、たとえば次のようになります。
object(DateTime) {
date => '2013-04-01 15:22:32'
timezone_type => (int) 3
timezone => 'Europe/London'
}
1.) 私は何を間違っていますか? オブジェクトから日時を取得するにはどうすればよいですか?
2.) これはこれを処理する良い方法ですか? つまり、ユーザーの時間を取得するには、すべてのdate()
呼び出しをこのスニペットに置き換える必要があります。
3.) ウェブサイトの日付が不一致になることはありませんか。たとえば、ヨーロッパのユーザーがアメリカのユーザーの後に何かを投稿した場合、現地時間が使用されているため、異なるものとして表示され、アメリカの前のように見える可能性があります。片方。
代わりにサーバー時間を保存してから、上記のスニペットを使用してユーザーに異なる方法で表示する必要があります。そのため、すべての時間は同じタイムゾーンですが、ユーザーに対して相対的に表示されますか?