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 集合中,相同的数据将根据设置的时区进行转换。
我在 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 集合中,相同的数据将根据设置的时区进行转换。