sql >> データベース >  >> RDS >> Mysql

PHPとMySQLでのタイムゾーンの処理

    タイムゾーンは煩わしいです、それについては間違いありません。私があなたを正しく理解しているなら、あなたはあなたのPHPがユーザーにとって正しいゾーンにあるビューに時間を返すことを望みますよね?

    私がしていることは、「マスタービュー」、または少なくとも1回はロードされることが保証されているsortまたはblade.phpファイル内で、このユーザーのタイムゾーンがセッション変数に格納されているかどうかを確認します。そうでない場合は、タイムゾーンの名前を保存するためにサーバーにAJAXリクエストを送信します。

    {{-- store timezone in session variables --}}
    @if (!Session::has('timezone'))
        <script>
            $(function () {
                var tz = jstz.determine();
                var data = {};
                if (typeof (tz) !== 'undefined') {
                    data.timezone = tz.name();
                }
                if (!$.isEmptyObject(data)) {
                    $.ajax({
                        type: "POST",
                        url: "{{ url('/api/v1/settings') }}",
                        beforeSend: function (request) {
                            request.setRequestHeader("X-CSRF-TOKEN", "{{ csrf_token() }}");
                        },
                        data: $.param(data),
                    });
                }
            });
        </script>
    @endif
    

    このアプローチではjstzパッケージを利用していることに注意してください。このパッケージは、ここからダウンロード できます。 <head>に含めます セクション。

    もちろん、このリクエストのルートを設定する必要があります。私の場合、次のようになります。

    Route::post('api/v1/settings', function () {
        // Save the user's timezone
        if (Request::has('timezone')) {
            Session::put('timezone', Request::get('timezone'));
        }
    });
    

    これで、指定されたデータベースの日時文字列を正しいタイムゾーンに変換する場合、$tz = $request->session()->get('timezone')と言うことでタイムゾーンを取得できます。 次に、Carbon\Carbon::parse($date, $tz);を使用して日付を解析します。

    一般に、すべての日付をUTC形式で保存することをお勧めします。これは標準であり、データベースがタイムゾーンに依存しないことが不可欠であるためです。ただし、デフォルトを変更する場合は、'timezone' => 'UTC'の行を編集できます。 config/app.php内 。これにより、Laravelがデフォルトでタイムスタンプを設定するゾーンが上書きされるため、created_at、updated_atは、その新しいタイムゾーンを反映するように変更されます。



    1. MySQLは複数の文字を置き換えることができますか?

    2. Djangoと読み取り専用のデータベース接続

    3. MySQLの代わりにMySQLiを使用する必要があるのはいつですか?

    4. テーブルの時間の重複をチェックしていますか?