如果我在index.phpecho date('m/d/Y h:i:s a', time());
中输出日期/时间。这是正确的。如果我在那之后的任何地方输出日期/时间,例如在扩展中,它正好关闭了4个小时。我已经在php.ini和Magento中正确设置了时区,所以不确定是什么原因导致它关闭。我运行的是1.7.0.2版本。
编辑
好的,所以我学到了一些东西。
Magento总是将时区设置为UTCapp/mage.php
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行,但我不喜欢修改核心代码。还有其他选择吗???
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);
如果要在Magento的数据库中保存日期,请确保它们是UTC。默认情况下,Magento将所有日期保存为UTC,但它应该在本地时区显示这些日期。
在我的情况下,时间在system.log中有所不同,但在Scheduler(cronjobs)中也有所不同。
假设现在是实时时间01.15,Scheduler中的Created time总是正确的,所以在这种情况下是01.15。执行时间有时是01.16,但通常是02.16,因此您可以看到01.16和02.16的混合,因此时间连续变化。
当我检查系统日志时,我看到了同样的情况,首先你会看到像01.50、02.45、03.50这样的消息的时间在增加,然后突然又是02.55。
因此,系统中有一些东西这次会有所不同,但在哪里,也许我的提供商找到了什么。。。但这不是系统时间,这与马根托有关。。Magento写入日志。。
编辑:
我不知道为什么会出现这个问题,但我在我所在的欧洲/阿姆斯特丹地区的Mage.php中更改了UTC时间。现在所有时间都是正确的,也在日志中。
但还有一个问题,当我在Scheduler(扩展)中立即安排cronjob时,该作业会在1小时后安排(Scheduler中的其他时间是正确的)。一个扩展Copernica在例如18.00运行(不是通过Scheduler),并写入它上次在17.00执行…没有其他非Magento网站有这种问题。。该数据库还在php.ini中使用欧洲/阿姆斯特丹。.