Khi sử dụng các lớp PHP DateTime
và cố gắng thiết lập một DateTimeZone
tôi nhận được kết quả khác nhau tùy thuộc vào cách tôi đặt nó: sử dụng DateTime::__construct
hoặc sử dụng phương pháp DateTime::setTimezone
.PHP DateTime múi giờ - Constructor vs phương pháp Setter
đây là một ví dụ:
$date = '2014-08-01'
$dateTimeOne = new DateTime($date, new DateTimeZone('America/Los_Angeles'));
echo $dateTimeOne->format('Y-m-d\TH:i:sP');
// 2014-08-01T00:00:00-07:00
$dateTimeTwo = new DateTime($date);
$dateTimeTwo->setTimezone(new DateTimeZone('America/Los_Angeles'));
echo $dateTimeTwo->format('Y-m-d\TH:i:sP');
// 2014-07-31T17:00:00-07:00
Xem thêm http://3v4l.org/LrZfM
Tôi đã nhìn quanh và đã không tìm thấy một lời giải thích thỏa đáng nhằm giải quyết những hành vi đặc thù khác so với những nhận xét sau đây trong php docs: datetime.settimezone và cuốn sách php|architect's Guide to Date and Time Programming: Dealing with Timezones - DateTimeZone.
Nhận xét nói rằng phương thức DateTime::setTimezone
sẽ thay đổi múi giờ cho một điểm cụ thể trong thời gian (dấu thời gian) nhưng dấu thời gian Unix vẫn không thay đổi.
Mặt khác, tham số DateTime::__construct
DateTimeZone được sử dụng để "ghi đè múi giờ mặc định hiện tại bằng múi giờ do người dùng xác định" Chapter 3: Dealing with Timezones - DateTimeZone.
Khác với những điều này không có nhiều về chủ đề (mà tôi đã có thể tìm thấy).
Đây là những gì tôi muốn biết:
- giải thích sâu hơn về hai cách sau đây để thiết lập múi giờ
- Khi nào tôi nên sử dụng
DateTime::__construct
để thiết lập múi giờ - Khi nào tôi nên sử dụng
DateTime::setTimezone
để đặt múi giờ - Ví dụ rõ ràng về cách sử dụng cái này so với cách khác hoặc cách sử dụng chúng một cách kết hợp
Có múi giờ trong hàm tạo có nghĩa là '$ date' nằm trong múi giờ đó; đặt múi giờ sẽ di chuyển ngày theo sự khác biệt giữa múi giờ lúc xây dựng và múi giờ nhất định. –