【问题标题】:Order confirmation email shows wrong timezone in summer time订单确认电子邮件显示夏令时时区错误
【发布时间】: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


【解决方案1】:

解决了这个问题。 在某些模块中,有时区重置代码部分。 它被确定为“EST”。 用UTC修正后,订单邮件的时间已更正。

    //date_default_timezone_set('EST');
    date_default_timezone_set(Mage_Core_Model_Locale::DEFAULT_TIMEZONE);

成功解决。

【讨论】:

    猜你喜欢
    • 2013-11-21
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多