【发布时间】:2018-09-01 02:41:59
【问题描述】:
当我创建订单时,订单确认电子邮件显示错误的时间。
- 仪表盘订单列表上的订单创建时间正确,只显示EDT。
- “sales_flat_order”表的“created_at”列将订单时间存储为UTC。
- 订单邮件的时间为“UTC+1”。
- 我必须在订单电子邮件中显示 EDT 时间。
怎么了?
- 在冬季,订单电子邮件显示“UTC”。
- 2018 年 3 月 11 日(夏令时)之后,订单电子邮件显示“EDT + 5”(与 UTC+1 相同)。
即使我更改了 Mage.php、locale.php 和 config.xml 上的默认时区,订单确认电子邮件仍显示 EDT+1 日期。 它非常有线。有什么解决办法吗?
我已经匹配了服务器时间、网络服务器时间和商店时区。
- 服务器时区:美国东部时间。
- Web 服务器时区:America/New_York
- magento 时区:America/New_York。
电子邮件模板中创建的时间 {{var order.getCreatedAtFormated('long')}} 向我们展示了“UTC+1”。 希望有好的解决方案。
评论:我在本地服务器和实时站点上对其进行了调试。 当我得到这些代码的时间结果时,现场网站会显示错误的时间。
- $order->getCreatedAt();本地时间输出 - UTC,实时输出 - UTC
- $order->getCreatedAtStoreDate();本地 - EDT,实时 - UTC+1(估计结果必须与本地服务器相同的 EDT)
所有来源都是相同的,因为本地来源是来自实时站点的克隆 Live站点使用外部数据库(RDS),但本地服务器不是。
\app\code\core\Mage\Sales\Model\Abstract.php
/**
* Get object created at date affected with object store timezone
*
* @return Zend_Date
*/
public function getCreatedAtStoreDate()
{
return Mage::app()->getLocale()->storeDate(
$this->getStore(),
Varien_Date::toTimestamp($this->getCreatedAt()),
true
);
}
【问题讨论】:
-
如果这个问题是关于在 Magneto 中编写代码,那么您来对地方了,但您需要展示您的代码。如果不是关于您正在编写的特定代码,那么您来错地方了,需要在magento.stackexchange.com 上提问。
-
所有代码均基于 Magento1.9.2.4 上的默认内核。另外,当我在本地服务器上调试它时,估计结果是正确的。在本地服务器上,当我输出此代码时,结果如下。 $order->getCreatedAt();本地 - UTC/站点 - UTC, $order->getCreatedAtStoreDate(); Local - EDT,但 Live site - UTC+1 这意味着 $order->getCreatedAtStoreDate() 在 live site 上显示错误的时间。怎么了?我已经将服务器时间和网络服务器时区检查为 New_York 时区。
标签: email magento timezone dst