Làm cách nào để đặt múi giờ động trong laravel?

Phương pháp getTimezoneOffset[] sẽ trừ thời gian của bạn từ GMT và trả về số phút. Vì vậy, nếu bạn sống ở GMT-8, nó sẽ trả về 480

Để đặt cái này thành giờ, hãy chia cho 60. Ngoài ra, hãy lưu ý rằng biển báo ngược lại với những gì bạn cần - nó đang tính toán độ lệch của GMT so với múi giờ của bạn, chứ không phải độ lệch múi giờ của bạn so với GMT. Để khắc phục điều này, chỉ cần nhân với -1

Cũng lưu ý rằng w3school nói

Giá trị được trả về không phải là hằng số, do thông lệ sử dụng Giờ tiết kiệm ánh sáng ban ngày

Sqlite. CURRENT_TIMESTAMP tính bằng GMT, không phải múi giờ của máy

Tôi tìm thấy trên tài liệu sqlite [https. //www. sqlite. tổ chức/lang_datefunc. html] văn bản này

Tính toán ngày và giờ được cung cấp dấu thời gian unix 1092941466 và bù cho múi giờ địa phương của bạn

SELECT datetime[1092941466, 'unixepoch', 'localtime'];

Điều đó có vẻ không phù hợp với nhu cầu của tôi, vì vậy tôi đã thử thay đổi chức năng "datetime" một chút và giải quyết vấn đề này

select datetime[timestamp, 'localtime']

Điều đó có vẻ hiệu quả - đó có phải là cách chính xác để chuyển đổi cho múi giờ của bạn hay có cách nào tốt hơn để thực hiện việc này?

Như bạn đã biết, giờ địa phương phụ thuộc vào múi giờ. Bạn có thể định cấu hình múi giờ cho hệ thống hoặc máy chủ của mình, chẳng hạn như PHP. Laravel sử dụng múi giờ UTC theo mặc định. Nhưng nếu bạn muốn sử dụng múi giờ cụ thể trong ứng dụng Laravel, bạn nên thay đổi múi giờ trong cài đặt Laravel

Trong bài viết ngắn này, tôi sẽ giải thích cách thay đổi múi giờ trong Laravel và cách xử lý việc tuần tự hóa ngày tháng trong các mô hình Eloquent

Mục lục

  • Cách đặt múi giờ trong Laravel trên toàn cầu
  • Cách sắp xếp ngày tháng trong các mô hình
  • Cách đặt múi giờ động
  • kết thúc

Cách đặt múi giờ trong Laravel trên toàn cầu

Laravel sẽ bỏ qua múi giờ từ cài đặt PHP vì nó có cài đặt múi giờ riêng. Bạn có thể định cấu hình múi giờ trong config/app. tập tin php. Chỉ cần tìm dòng múi giờ

Bạn có thể đặt giá trị cần thiết tại đây. Chỉ thị hỗ trợ tất cả các múi giờ được hỗ trợ bởi PHP. Bạn có thể tìm thấy danh sách trên trang web chính thức. Ví dụ: đặt Châu Âu/Kyiv

"timezone" => "Europe/Kyiv"

Bạn cũng có thể sử dụng. env để định cấu hình múi giờ. Chỉ cần tạo dòng múi giờ trong cấu hình/ứng dụng. php trông như thế này.

"timezone" => \env["TIMEZONE", "UTC"]

Sau đó, thêm dòng này vào. tập tin env

TIMEZONE="Europe/Kyiv"

Đừng quên xóa bộ đệm cấu hình.

php artisan config:clear

Cách sắp xếp ngày tháng trong các mô hình

Nếu bạn cố gắng tuần tự hóa Mô hình bằng phương thức toArray[], bạn có thể nhận thấy rằng bất kỳ dấu thời gian nào, chẳng hạn như created_at và updated_at sẽ có múi giờ sai. Tôi sẽ sử dụng mô hình Article từ bài viết này. Hãy xem ví dụ

Nếu bạn sử dụng Carbon để tuần tự hóa múi giờ là chính xác. Nhưng khi bạn sử dụng toArray[] thì thời gian sẽ lùi lại 3 giờ. Có vẻ như phương pháp này bỏ qua múi giờ Laravel. Nó không phải là một lỗi. Các nhà phát triển của Laravel đã thay đổi quy tắc tuần tự hóa cho các phương thức toArray[] và toJSON[]. Giờ đây, họ sử dụng định dạng ISO-8601 và luôn chỉ định thời gian theo UTC. Bạn có thể đọc thêm về nó ở đây. Nếu bạn muốn Eloquent tôn trọng múi giờ, bạn có thể ghi đè phương thức serializeDate[] trong model. Ví dụ

protected function serializeDate[DateTimeInterface $date]
{
    return $date->format['Y-m-d H:i:s'];
}

Sau đó, tất cả các ngày sẽ được sắp xếp theo thứ tự với múi giờ chính xác

Cách đặt múi giờ động

Bạn cũng có thể muốn tự động đặt múi giờ cho người dùng. Không có cách nào để làm điều đó trên toàn cầu, vì vậy bạn nên chuyển đổi từng ngày thành múi giờ của người dùng. Tất nhiên, bạn có thể đặt múi giờ bằng hàm date_default_timezone_set[]. Nhưng đó là một ý tưởng tồi vì điều này có thể gây nhầm lẫn giữa ngày hiển thị trong nhật ký và cơ sở dữ liệu. Chuyển đổi từng ngày thành múi giờ bắt buộc theo cách thủ công. Carbon có phương thức setTimezone[] cho phép đặt múi giờ tùy chỉnh. Ví dụ

Carbon::now[]->setTimezone[new CarbonTimeZone['Europe/Kyiv']->format[];

Bạn có thể lấy múi giờ của người dùng từ cơ sở dữ liệu bằng cách yêu cầu múi giờ đó từ người dùng trước trong quá trình đăng ký hoặc bạn có thể xác định múi giờ đó từ địa chỉ IP bằng cách sử dụng torann/geoip. Ngoài ra, bạn có thể thử sử dụng gói jamesmills/laravel-timezone, gói này cho phép lưu múi giờ của người dùng khi đăng nhập và có một vài trình trợ giúp để chuyển đổi ngày sang múi giờ chính xác.

kết thúc

Trong bài viết này, tôi đã giải thích cách đặt múi giờ trong Laravel và xử lý việc tuần tự hóa ngày tháng trong Eloquent. Múi giờ có ý nghĩa quan trọng khi bạn cần hiển thị ngày giờ chính xác đến từng giờ hoặc từng phút. Như bạn có thể thấy, cấu hình rất dễ dàng

Làm cách nào để đặt múi giờ UTC trong laravel?

Laravel có múi giờ mặc định được đặt thành UTC. .
Thay đổi múi giờ. Có hai cách chính để thay đổi múi giờ
lựa chọn 1. Từ thư mục gốc dự án của bạn, hãy mở thư mục cấu hình. chỉnh sửa ứng dụng. .
Lựa chọn 2. Thực hiện một sửa đổi trong. env để chỉ định múi giờ như sau. APP_TIMEZONE='Châu Á/Singapore'

Làm cách nào để đặt múi giờ mặc định trong PHP?

Hàm date_default_timezone_set[] đặt 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.

Làm cách nào để lấy múi giờ của khách hàng trong laravel?

Để 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
Lưu trữ múi giờ trong quá trình Đăng ký
Thêm múi giờ làm trường ẩn trong biểu mẫu đăng ký
Nhận múi giờ từ yêu cầu đăng khi đăng ký

Làm cách nào để đặt múi giờ MySQL?

Tùy chọn 2. Chỉnh sửa tệp cấu hình MySQL . 00" dòng. Thay đổi +00. 00 thành giá trị GMT cho múi giờ bạn muốn. Lưu file và thoát. Trong ví dụ bên dưới, chúng tôi đặt múi giờ của Máy chủ MySQL thành +08. 00 [GMT +8].

Chủ Đề