Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Xử lý múi giờ trong PHP và MySQL

múi giờ gây khó chịu, không có nghi ngờ gì về điều đó. Nếu tôi hiểu đúng về bạn, bạn muốn PHP của bạn trả lại thời gian cho chế độ xem nằm trong vùng chính xác cho người dùng, phải không?

Những gì tôi làm là trong 'chế độ xem chính' hoặc một số tệp sắp xếp hoặc tệp blade.php được đảm bảo tải ít nhất một lần, tôi kiểm tra xem múi giờ của người dùng này có được lưu trữ trong một biến phiên hay không. Nếu không, tôi gửi yêu cầu AJAX đến máy chủ để lưu trữ tên của múi giờ.

{{-- 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

Lưu ý rằng phương pháp này sử dụng gói jstz mà bạn có thể tải xuống tại đây và đưa vào <head> của bạn phần.

Tất nhiên, bạn sẽ cần thiết lập tuyến đường cho yêu cầu này, đối với trường hợp của tôi, nó giống như sau:

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

Bây giờ, khi bạn muốn chuyển đổi các chuỗi ngày giờ trong cơ sở dữ liệu đã cho thành múi giờ chính xác, bạn có thể lấy múi giờ bằng cách nói $tz = $request->session()->get('timezone') và sau đó phân tích cú pháp các ngày bằng Carbon\Carbon::parse($date, $tz);

Nói chung, tôi khuyên bạn nên lưu trữ tất cả các ngày ở định dạng UTC, vì đó là tiêu chuẩn và điều cấp bách là cơ sở dữ liệu vẫn là bất khả tri về múi giờ. Nhưng nếu bạn muốn thay đổi mặc định, bạn có thể chỉnh sửa dòng 'timezone' => 'UTC' trong config/app.php . Điều đó sẽ ghi đè lên vùng mà Laravel đặt mặc định dấu thời gian của nó, vì vậy, create_at, updated_at của bạn sẽ được thay đổi để phản ánh múi giờ mới đó.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. pip3 cài đặt mysql-python không thành công với mã lỗi 1 trong / tmp / pip-install-4nev4id4 / mysql-python /

  2. Làm thế nào để gọi một thủ tục được lưu trữ MySQL từ bên trong mã PHP?

  3. Làm cách nào để lấy các giá trị duy nhất từ ​​bảng dữ liệu bằng dql?

  4. Cách chọn bản ghi 3 phút cuối từ MySQL với PHP

  5. Mysql chọn Truy vấn với nhiều điều kiện của cùng một cột