2012-09-30 31 views
6

Nếu tôi xuất ngày/giờ trong index.php echo date('m/d/Y h:i:s a', time());. Đúng. Nếu tôi xuất ngày/giờ bất cứ nơi nào sau đó, trong một phần mở rộng ví dụ nó tắt 4 giờ chính xác. Tôi đã thiết lập múi giờ đúng trong php.ini và trong Magento chính nó để không chắc chắn những gì gây ra nó được tắt. Tôi đang chạy phiên bản 1.7.0.2.Magento ouputting ngày và giờ không chính xác

EDIT

Ok vì vậy tôi đã học được một vài điều.

Magento luôn đặt múi giờ UTC trong app/mage.php

line 767: date_default_timezone_set('UTC') 

Vì vậy, về cơ bản bạn không thể sử dụng ngày(), thời gian() vv Bạn phải thiết lập múi giờ Nhắm mục tiêu của bạn trong Quản trị-> Hệ thống-> Cấu hình/Chung-> Tùy chọn ngôn ngữ và sử dụng một cái gì đó như:

$now = Mage::getModel('core/date')->timestamp(time()); 
echo date('m/d/y h:i:s', $now); 

Tôi luôn có thể thay thế dòng 767 bằng múi giờ của mình nhưng tôi không thích sửa đổi mã lõi. Có bất kỳ tùy chọn nào khác không?

Trả lời

7

Phương pháp ưa thích trong Magento có vẻ là sử dụng đối tượng ngày giờ Zend hoặc Varien thay vì giá trị vô hướng như trong this example. Một khi bạn có đối tượng của bạn, bạn có thể dễ dàng chuyển đổi nó sang các múi giờ khác, không phải máy chủ với một cuộc gọi setTimezone.

// a more complete example 
$datetime = Zend_Date::now(); 
// admin controls this output through configuration 
$datetime->setLocale(Mage::getStoreConfig(
      Mage_Core_Model_Locale::XML_PATH_DEFAULT_LOCALE)) 
     ->setTimezone(Mage::getStoreConfig(
      Mage_Core_Model_Locale::XML_PATH_DEFAULT_TIMEZONE)); 
echo $datetime->get(Zend_Date::DATETIME_SHORT); 
+0

upvote from me ...... –

4

Nếu bạn đang lưu ngày trong cơ sở dữ liệu của Magento, hãy đảm bảo chúng ở trong UTC. Theo mặc định, Magento lưu tất cả các ngày dưới dạng UTC nhưng nó được cho là hiển thị chúng theo múi giờ địa phương.

0

Trong trường hợp của tôi, thời gian khác nhau, ví dụ: system.log mà còn trong Scheduler (cronjobs).

Vì vậy, giả sử bây giờ là 01.15 thời gian thực, thời gian đã tạo trong Trình lập lịch biểu luôn chính xác, vì vậy, trong trường hợp này là 01.15. Hơn thời gian thực thi đôi khi là 01.16 nhưng thường là 02.16, vì vậy bạn thấy kết hợp của 01.16 và 02.16, do đó thời gian thay đổi liên tục.

Khi tôi kiểm tra nhật ký hệ thống, tôi thấy giống nhau, trước tiên bạn thấy số lần tăng cho các thư như 01.50, 02.45, 03.50 và đột nhiên 02.55 một lần nữa.

Vì vậy, có gì đó trong hệ thống thay đổi lần này, nhưng ở đâu, có thể nhà cung cấp của tôi tìm thấy thứ gì đó ... nhưng đó không phải là thời gian hệ thống, nó phải làm với Magento .. Magento ghi vào nhật ký. .

EDIT:

tại sao vấn đề này là ở đó tôi không biết, nhưng tôi thay đổi thời gian tính theo giờ UTC trong Mage.php trong khu vực của tôi Châu Âu/Amsterdam. Bây giờ tất cả các lần là chính xác, cũng trong các bản ghi.

Nhưng một vấn đề nữa, khi tôi lên lịch cronjob ngay lập tức trong Scheduler (phần mở rộng), công việc này được lên lịch 1 giờ sau đó (các lần khác trong Trình lập lịch biểu là chính xác). Tiện ích mở rộng Copernica chạy ở ví dụ: 18.00 (không thông qua Scheduler) và viết nó được thực hiện lần cuối lúc 17.00 ... không có webshops nào khác của Magento có loại vấn đề này .. cơ sở dữ liệu cũng đang sử dụng châu Âu/Amsterdam trong php.ini ..

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