Magento是否希望服务器时区与默认存储时区匹配?

时间:2015-08-19 18:17:53

标签: magento datetime

看看Mage_Core_Model_Date::gmtTimestamp()

/**
 * Forms GMT timestamp
 *
 * @param  int|string $input date in current timezone
 * @return int
 */
public function gmtTimestamp($input = null)
{
    if (is_null($input)) {
        return gmdate('U');
    } else if (is_numeric($input)) {
        $result = $input;
    } else {
        $result = strtotime($input);
    }

    if ($result === false) {
        // strtotime() unable to parse string (it's not a date or has incorrect format)
        return false;
    }

    $date      = Mage::app()->getLocale()->date($result);
    $timestamp = $date->get(Zend_Date::TIMESTAMP) - $date->get(Zend_Date::TIMEZONE_SECS);

    unset($date);
    return $timestamp;

}

假设$input"Today" 假设服务器时区为UTC

$date->get(Zend_Date::TIMEZONE_SECS)对应于商店时区和UTC之间的秒数差异。如果Magento默认存储(我正在从管理员测试)时区iz Pacific/Auckland (GMT+12),则值为43200

现在,鉴于Magento正在从通过strtotime获得的时间戳中减去该差异,显然期望获得的时间戳与商店时区相匹配。但是,它不是,并且通过从GMT时间减去新西兰时差,结果将是GMT-12,而不是GMT+00

此行为特别影响应用目录规则。如果您查看catalogrule_product_price,您会看到为当天,前一天和第二天创建了规则条目。但是,由于上面描述的GMT-12错误,在某些情况下,这些条目将在当天,昨天和前天进行。

这会以下列方式在前端创建问题:在Mage_CatalogRule_Model_Observer::processFrontFinalPrice()中,$date值将与NZ时间戳匹配。 ,格林威治标准时间+12,或者在某些情况下,从UTC观察员的位置开始的某一天。由于catalogrule_product_price中的条目不包含第二天的条目,因此最终将导致无法获取目录规则。

您可以通过在admin。中应用目录规则来触发此代码的执行。

1 个答案:

答案 0 :(得分:0)

经过重大测试后,简而言之,您的基本商店时区应该与您的服务器时区相匹配。