2009-06-16 41 views
6

Tôi có một ứng dụng sử dụng Zend_Date để hiển thị ngày tháng. Các cá thể Zend_Date được tạo bằng cách sử dụng dữ liệu datetime từ MySQL, đầu vào của người dùng và ngày hiện tại.Xử lý ngày tháng và múi giờ, với Zend_Date

Tôi muốn người dùng của mình có thể chỉ định múi giờ của họ và cho tất cả các ngày được hiển thị theo giờ địa phương của họ.

Tại thời điểm mã của tôi làm việc như thế này:

$date = '2009-01-01 10:30:00'; 

$date = new Zend_Date($date, Zend_Date::ISO_8601); 

echo $date->get(Zend_Date::TIME_MEDIUM); //10:30:00 

$date->setTimezone('Australia/ACT'); 

echo $date->get(Zend_Date::TIME_MEDIUM); //21:30:00 

này hoạt động, nhưng đòi hỏi một cuộc gọi setTimezone trên mỗi ngày. Có cách nào dễ dàng hơn để quản lý múi giờ không?

Tôi cũng đã xem xét việc sử dụng SET time_zone với MySQL, để trả về dữ liệu đã điều chỉnh từ MySQL. Sau đó, tôi chỉ cần điều chỉnh ngày được tạo trong các tập lệnh PHP cho múi giờ.

Tôi muốn nghe cách tốt nhất để xử lý việc này, nếu ai đó có kinh nghiệm.

Cảm ơn

Trả lời

7

Tôi nghĩ rằng việc đặt múi giờ PHP nên đặt mặc định cho tất cả các phiên bản Zend_Date tiếp theo. Ví dụ:

date_default_timezone_set('Europe/Vienna'); 

Từ Zend_Date section in the Zend Framework Reference Guide:

Trong PHP, chúng ta có thể điều chỉnh tất cả các chức năng ngày và thời gian liên quan đến làm việc cho một người dùng cụ thể bằng cách thiết lập một múi giờ mặc định theo sự mong đợi của người dùng. Khi tạo các cá thể Zend_Date, múi giờ của chúng sẽ tự động trở thành múi giờ mặc định hiện tại!

+2

Cảm ơn. Dường như cách tốt nhất là để tôi đặt UTC làm mặc định, làm việc với UTC datetime nội bộ và sử dụng setTimezone để tạo múi giờ cụ thể theo múi giờ. –

1

Tôi nghĩ bạn có thể sử dụng Zend_Locale, đọc một số tài liệu về nó, chắc chắn bạn có thể làm cho nó hoạt động. Mặt khác, nếu bạn sử dụng Zend_Cache và Zend_Locale/Zend_Date, điều đó sẽ giúp cải thiện tốc độ một chút. Có các ví dụ về cách sử dụng trong tài liệu khung công tác zend.

Các vấn đề liên quan