Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Berurusan dengan zona waktu di PHP dan MySQL

zona waktu menyebalkan, tidak ada keraguan tentang itu. Jika saya memahami Anda dengan benar, Anda ingin PHP Anda mengembalikan waktu ke tampilan yang berada di zona yang benar untuk pengguna, bukan?

Apa yang saya lakukan adalah dalam 'master view' atau semacam atau file blade.php yang dijamin dimuat setidaknya sekali, saya memeriksa apakah zona waktu pengguna ini disimpan dalam variabel sesi. Jika tidak, saya mengirim permintaan AJAX ke server untuk menyimpan nama zona waktu.

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

Perhatikan bahwa pendekatan ini menggunakan paket jstz, yang dapat Anda unduh di sini dan sertakan dalam <head> . Anda bagian.

Tentu saja Anda perlu mengatur rute untuk permintaan ini, untuk kasus saya, tampilannya seperti ini:

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

Sekarang, ketika Anda ingin mengonversi string datetime database yang diberikan ke zona waktu yang benar, Anda bisa mendapatkan zona waktu dengan mengatakan $tz = $request->session()->get('timezone') dan kemudian menguraikan tanggal dengan Carbon\Carbon::parse($date, $tz);

Secara umum, saya akan merekomendasikan Anda tetap dengan menyimpan semua tanggal dalam format UTC, karena itu adalah standar dan sangat penting bahwa database tetap agnostik zona waktu. Namun jika ingin mengubah default, Anda dapat mengedit baris 'timezone' => 'UTC' di config/app.php . Itu akan menimpa zona yang menjadi default stempel waktunya Laravel, jadi create_at Anda, updated_at akan diubah untuk mencerminkan zona waktu baru itu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sumber tidak ditemukan File JAR mysql-connector-java-5.1.20-bin.jar tidak memiliki lampiran sumber

  2. BUAT TABLE new_table_name SEPERTI old_table_name dengan nilai AUTO_INCREMENT old_table_name

  3. Nilai integer salah '' untuk kolom MySQL yang integer dan mengizinkan null?

  4. Bangun pernyataan yang disiapkan secara dinamis dengan call_user_func_array()

  5. JPA Menyimpan tanggal yang salah di database MySQL