Có một vài lựa chọn, không có lựa chọn nào thực sự hiệu quả. Đây là một lỗi của WordPress và nó thực sự rất tệ bởi vì thời gian là sai trừ khi bạn đặt trang web của mình thành UTC ... điều này gây nhầm lẫn và không phải lúc nào cũng có thể.
Mã tiếp theo này tôi nghĩ chỉ hoạt động nếu bạn chọn Múi giờ của mình (Trong Cài đặt -> Chung trong quản trị viên) làm thành phố được đặt tên thay vì bù vào số GMT. Tôi đã không kiểm tra điều này nhưng rất có thể nó get_option('gmt_offset')
được đặt khi get_option('timezone_string')
không.
date_default_timezone_set(get_option('timezone_string'));
Nhược điểm của việc này là WordPress giả định PHP được đặt thành UTC khi tạo dấu thời gian mysql, do đó bạn có thể làm xáo trộn cơ sở dữ liệu của mình một chút bất cứ khi nào bạn chuyển đổi múi giờ! Chưa kể các plugin WP khác có thể cho rằng môi trường PHP luôn ở trong UTC.
Vì vậy, nếu bạn chỉ muốn có thời gian chính xác - bạn có thể buộc dấu thời gian của mình ở trong UTC với:
get_post_time('c', true); //should work for non-post objects.
Thật không may, mặc dù đúng, nó sẽ làm cho múi giờ được đặt thành UTC.
Và lưu ý rằng cả hai bạn không thể sử dụng cờ "thật" và hàm timezone_set mặc định.
Bất kỳ giải pháp thích hợp nào cũng sẽ là một đoạn mã chiếm cả gmt_offset
AND timezone_string
và sử dụng chúng để đặt múi giờ trên một số đầu vào. WP giả định rằng PHP được đặt thành UTC khi thực hiện dấu thời gian mysql và nó có thể phá vỡ các plugin khác.
Có một giải pháp như vậy trên https://www.skyverge.com/blog/down-the-rabbit-hole-wordpress-and-timezones/ nhưng, một lần nữa đây là BUG, vì vậy bạn nên sử dụng get_post_time($date_format, TRUE)
mã để có dấu thời gian là thực sự chính xác.