Magento 2 个时区

Magento 2 timezones

我在 magento 2 中获取日期时间时遇到问题 collection。

例如这是数据库数据:

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 collection returns:

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

这是在 Zend_Db_Select 级别返回的,错误的日期在网格、表格、collections、负载上。

有什么奇怪的,table cms_block好像还可以吧。我的意思是相同的 updated_at 和 created_at 都在 db 和 magento collections.

我试图在 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'
    );

有什么建议吗?

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

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

文件app/code/vendor/YourModule/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>

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

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