6

如果我在 index.php 中输出日期/时间echo date('m/d/Y h:i:s a', time());。这是正确的。如果我在那之后的任何地方输出日期/时间,例如在扩展中它正好关闭 4 小时。我已经在 php.ini 和 Magento 本身中正确设置了时区,所以不确定是什么导致它关闭。我正在运行版本 1.7.0.2。

编辑

好的,所以我学到了一些东西。

Magento 总是在 app/mage.php 中将时区设置为 UTC

line 767: date_default_timezone_set('UTC')

所以,基本上你不能使用 date(),time() 等。你必须在 Admin->System->Configuration / General->Locale 选项中设置你的目标时区,并使用类似的东西:

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

我总是可以用我的时区替换第 767 行,但我不喜欢修改核心代码。还有其他选择吗???

4

3 回答 3

7

Magento 中的首选方法似乎是使用 Zend 或 Varien 日期时间对象,而不是本示例中的标量值。拥有对象后,您可以通过调用轻松地将其转换为其他非服务器时区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);
于 2012-09-30T10:26:22.297 回答
4

如果您在 Magento 的数据库中保存日期,请确保它们采用 UTC。默认情况下,Magento 将所有日期保存为 UTC,但它应该以本地时区显示它们。

于 2013-09-26T04:07:25.070 回答
0

在我的情况下,时间在例如 system.log 和调度程序(cronjobs)中有所不同。

所以假设现在是 01.15 实时,Scheduler 中的 Created 时间总是正确的,所以在这种情况下是 01.15。比执行时间有时是 01.16 但通常是 02.16,所以你会看到 01.16 和 02.16 的混合,所以时间连续变化。

当我检查系统日志时,我看到了同样的情况,首先你会看到像 01.50、02.45、03.50 和突然 02.55 这样的消息的时间增加。

所以系统中有一些东西让这次变化,但是在哪里,也许我的提供者找到了一些东西......但这不是系统时间,它与 Magento .. Magento 写入日志..

编辑:

为什么会出现这个问题我不知道,但我在我所在的欧洲/阿姆斯特丹地区的 Mage.php 中更改了 UTC 时间。现在所有时间都是正确的,在日志中也是如此。

但是又出现了一个问题,当我在调度程序(扩展)中立即安排一个 cronjob 时,这个作业被安排在 1 小时后(调度程序中的其他时间是正确的)。一个扩展 Copernica 在例如 18.00 运行(不是通过调度程序)并写道它上次在 17.00 执行......没有其他非 Magento 网店有这种问题..数据库也在 php.ini 中使用 Europe/Amsterdam ..

于 2013-11-15T02:52:27.593 回答