Cách lấy múi giờ của người dùng trong php?

Dấu thời gian mặc định của Laravel được lưu trữ trong UTC và nếu bạn làm việc với một ứng dụng mà người dùng ở múi giờ khác, họ có thể thấy dấu thời gian trong ứng dụng không khớp với múi giờ của họ

Để khắc phục điều này, bạn cần lưu trữ múi giờ của người dùng trong cơ sở dữ liệu và đồng thời chuyển đổi các mô hình liên quan đến người dùng thành múi giờ thích hợp từ UTC

Chúng tôi sẽ bao gồm hướng dẫn này trong hai phần

  1. Truy xuất và lưu trữ múi giờ của người dùng
  2. Chuyển đổi dấu thời gian UTC thành TimeZone của người dùng

Hãy bắt đầu với phần đầu tiên

#1 Truy xuất và lưu trữ múi giờ của người dùng

Chúng tôi sẽ sử dụng plugin javascript trong nền để lấy múi giờ của người dùng và chúng tôi có thể lưu trữ múi giờ trong bảng của người dùng tại thời điểm Đăng ký hoặc Đăng nhập. Chúng tôi sẽ bao gồm cả hai cách

Để lưu trữ múi giờ của người dùng trong cơ sở dữ liệu, chúng tôi sẽ cần thêm một cột trong bảng của người dùng, trước tiên hãy thêm cột đó

Thêm cột "múi giờ" trong cơ sở dữ liệu bảng người dùng

Chúng tôi phải thêm một cột mới "múi giờ" trong bảng người dùng. cho điều này thêm một lĩnh vực mới trong

Tệp

php artisan migrate:fresh
0 sử dụng đoạn mã sau

      public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->string('timezone');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

Chạy lệnh thủ công sau để bỏ tất cả các bảng và chạy lại quá trình di chuyển

php artisan migrate:fresh

 

Lưu trữ múi giờ trong quá trình Đăng ký

Bây giờ chúng ta hãy đến phần mà chúng ta sẽ truy xuất múi giờ của người dùng trong quá trình đăng ký

Đưa đoạn mã sau vào cuối 

php artisan migrate:fresh
1





Với tập lệnh này, chúng tôi đang sử dụng plugin múi giờ theo thời điểm để truy xuất múi giờ của người dùng và sau đó chúng tôi sẽ đặt nó vào một trường ẩn bên trong biểu mẫu đăng ký

Thêm múi giờ làm trường ẩn trong biểu mẫu đăng ký

 
@csrf

Bây giờ khi bạn mở trang đăng ký (/register) và nhấp vào kiểm tra

Bạn sẽ tìm thấy múi giờ của người dùng như thế này

Cách lấy múi giờ của người dùng trong php?

Ở đây chúng ta có thể thấy múi giờ là "Châu Á/Calcutta"

 

Bây giờ, phần tiếp theo là lấy múi giờ này sau khi đăng ký và lưu trữ nó trong cơ sở dữ liệu

Nhận múi giờ từ yêu cầu đăng khi đăng ký

Chúng tôi đang sử dụng phương pháp

php artisan migrate:fresh
2, được gọi mỗi khi người dùng mới đăng ký. Đối với điều này, chúng ta phải thêm dòng mã sau vào tệp
php artisan migrate:fresh
3

________số 8

chúng tôi rất tốt để đi. khi người dùng nhấp vào đăng ký với tất cả các trường bắt buộc, múi giờ sẽ được lưu trữ trong cơ sở dữ liệu

 

Lưu trữ múi giờ trong khi đăng nhập

Quá trình tương tự cũng có thể được thực hiện trong quá trình đăng nhập, đối với điều này, bạn cần đưa cùng một tập lệnh vào cuối quá trình đăng nhập. lưỡi. php và sau đó bao gồm một trường ẩn trong biểu mẫu đăng nhập

   

   @csrf

khi bạn có múi giờ trong biểu mẫu đăng nhập, giờ đây bạn có thể sử dụng phương thức Đã xác thực trong LoginController để lưu múi giờ trong bảng của người dùng trong cơ sở dữ liệu

      public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->string('timezone');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }
0

Bây giờ khi người dùng đăng nhập, nếu anh ta chưa có múi giờ trong cơ sở dữ liệu, nó sẽ được thêm vào

Bây giờ chúng ta đã hoàn thành việc tìm cách truy xuất và lưu trữ múi giờ của người dùng, Bây giờ chúng ta sẽ xem cách chúng ta có thể sử dụng múi giờ này để chuyển đổi dấu thời gian UTC thành múi giờ dành riêng cho người dùng

#2 Chuyển đổi UTC thành múi giờ của người dùng

Theo mặc định, dấu thời gian của Laravel bao gồm các trường

php artisan migrate:fresh
4 ,
php artisan migrate:fresh
5 trong bảng Mô hình được lưu trữ theo múi giờ UTC và điều này được chỉ định trong tệp
php artisan migrate:fresh
6

php artisan migrate:fresh
7

Bây giờ chúng ta phải chuyển đổi rõ ràng theo múi giờ của người dùng bằng cách sử dụng trường "múi giờ" được lưu trữ

Chúng tôi sẽ sử dụng trình biến đổi của Laravel cho tác vụ này để mỗi khi một trường chứa dấu thời gian được yêu cầu từ cơ sở dữ liệu trước, nó sẽ đi qua trình biến đổi để chuyển đổi

Ví dụ: tôi đã chuyển đổi trường

php artisan migrate:fresh
4 mỗi lần trước khi hiển thị cho người dùng như sau

      public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->string('timezone');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }
6

Nếu múi giờ của người dùng có trong cơ sở dữ liệu, nó sẽ được chuyển đổi thành múi giờ đó hoặc nó sẽ ở dạng UTC vì múi giờ mặc định của ứng dụng là "UTC"

Thưởng

Chúng tôi đã đề cập đến hai cách mà chúng tôi đang sử dụng javascript để phát hiện múi giờ của người dùng và sau đó chúng tôi lưu trữ múi giờ đó trong cơ sở dữ liệu, nếu bạn muốn người dùng của mình chọn múi giờ theo cách thủ công từ danh sách múi giờ hoặc nếu anh ấy muốn cập nhật múi giờ

Cho phép Người dùng Chọn/Thay đổi Múi giờ

Có một cách nữa, trong đó người dùng có thể chọn múi giờ hợp lệ một cách rõ ràng. Danh sách múi giờ do PHP cung cấp.
Đối với điều này, chúng tôi phải cung cấp danh sách thả xuống cho người dùng. nơi người dùng sẽ chọn múi giờ và múi giờ đó sẽ được lưu trữ trong bảng người dùng trong cơ sở dữ liệu.

Thêm mã danh sách múi giờ trong tệp phiến
      public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->string('timezone');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }
7

chúng tôi có thể lấy trường múi giờ này từ "yêu cầu" để lưu trữ trong cơ sở dữ liệu và để sau này chuyển đổi từ UTC sang múi giờ của người dùng

PHP xác định múi giờ như thế nào?

Hàm date_default_timezone_get() trả về múi giờ mặc định được sử dụng bởi tất cả các hàm ngày/giờ trong tập lệnh.

Múi giờ của người dùng là gì?

Múi giờ của người dùng là múi giờ dành riêng cho khách hàng có thể được xác định cho thời gian và ngày sử dụng của từng người dùng trong bản ghi chính của người dùng. It is contained in the system field sy-zonlo.

Làm cách nào tôi có thể lấy múi giờ và mã quốc gia trong PHP?

PHP có chức năng sử dụng GeoIP. Hàm geoip_time_zone_by_country_and_region() sẽ trả về múi giờ tương ứng với tổ hợp mã quốc gia và mã vùng.

Múi giờ PHP được đặt ở đâu?

Cách đặt múi giờ PHP trong php. .
Chuyển đến tài khoản cPanel của bạn >> phần Tệp >> menu Trình quản lý tệp
Điều hướng đến thư mục gốc của trang web của bạn (theo mặc định, nó là public_html cho tên miền chính và tên miền của bạn. com cho tên miền addon). .
Thêm dòng sau. .
Nhấp vào Lưu thay đổi