Magento 2时区

时间:2016-12-15 20:09:37

标签: mysql timezone magento2 magento-2.0

我遇到了在magento 2集合中获取日期时间的问题。

例如这是数据库数据:

entity_id | paid_at
------------------------------------------
        1 | 2016-12-13 07:30:39

完整数据库查询:

CREATE TABLE `pmnt` (
    `entity_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
    `paid_at` timestamp NULL DEFAULT NULL COMMENT 'Payment date',
    PRIMARY KEY (`entity_id`),
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COMMENT='pmnt'

和magento集合返回:

[
    'entity_id' => 1
    'paid_at' => '2016-12-13 06:30:39'
]

这是在Zend_Db_Select级别返回的,错误的日期是在网格,表单,集合,加载上。

奇怪的是,表cms_block似乎没问题。我的意思是同样的updated_at和created_at都在db和magento集合中。

我尝试在bootstrap.php中设置时区,但是cms_block collection在日期时间错误。

$table = $installer->getConnection()
    ->newTable($tableName)
    ->addColumn(
        'entity_id',
        Table::TYPE_INTEGER,
        null,
        [
            'identity' => true,
            'unsigned' => true,
            'nullable' => false,
            'primary'  => true,
        ],
        'ID'
        )
    ->addColumn(
        'paid_at',
        Table::TYPE_TIMESTAMP,
        null,
        [
            'nullable' => true
        ],
        'Payment date'
    );

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

在MySQL中,TIMESTAMP数据类型始终以UTC格式存储。当应用程序(如命令行mysql工具或magento)将时间值放入MySQL以存储在时间戳中时,该时间值始终从当前设置time_zone转换为世界标准时间。当应用程序检索TIMESTAMP值时,它始终从UTC转换为当前time_zone设置。因此,当您说这是数据库数据时,如果不知道您当前的时区设置,很难知道实际存储的内容。

答案 1 :(得分:0)

在Ui组件网格管理员中。您可以通过以下代码通过商店的时区显示paid_at列:

文件app / code / vendor / Your Module / view / adminhtml / ui_component / listing.xml

<column name="paid_at" class="Magento\Ui\Component\Listing\Columns\Date">
    <argument name="data" xsi:type="array">
        <item name="config" xsi:type="array">
            <item name="filter" xsi:type="string">dateRange</item>
            <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
            <item name="dataType" xsi:type="string">date</item>
            <item name="label" xsi:type="string" translate="true">Paid At</item>
            <item name="sortOrder" xsi:type="number">8</item>
        </item>
    </argument>
</column>

答案 2 :(得分:0)

您的服务器时区与后端的magento时区设置不同。

在直接sql查询中,你得到服务器时区的结果。 在magento集合中,相同的数据将根据设置时区进行转换。