我遇到了在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'
);
有什么建议吗?
答案 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集合中,相同的数据将根据设置时区进行转换。