2016-12-15 74 views
0

我有在magento 2集合中獲取日期時間的問題。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集合獲取錯誤的日期時間。

$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

'paid_at'列的MySQL數據類型是什麼?您使用什麼工具來檢索問題頂部示例中顯示的*數據庫數據*? –

+0

嗨,paid_at是時間戳,我編輯我的帖子全表查詢是最重要的。爲了從表中獲取這些數據,我嘗試使用:phpmyadmin,phpstorm db工具和命令行mysql工具 – amr

回答

1

在MySQL中,TIMESTAMP數據類型始終以UTC格式存儲。當應用程序(如命令行mysql工具或magento)將時間值放入MySQL中以存儲在時間戳中時,該時間值爲總是從當前設置time_zone轉換爲UTC。當應用程序檢索TIMESTAMP值時,它始終從UTC翻譯爲當前的time_zone設置。所以,當你說這是數據庫數據,很難知道什麼實際存儲不知道您當前的時區設置。

+0

我只是將此字段更改爲datetime,相同 - 錯誤 - 效果。同樣,在同一個數據庫中的表cms_block也具有帶時間戳的字段,並且通過集合得到的值是正確的。 timestamp是歐洲/華沙,MySQL數據庫在全局和會話中均設置爲SYSTEM – amr

+0

似乎你是對的。我改變了這種列類型。緩存不乾淨,所以我沒有得到正確的結果。無論如何,我仍然不知道爲什麼magento設置不正確的time_zone:/ – amr

0

在用戶界面組件網格管理。

文件app /代碼/供應商/你的模塊/視圖/ 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> 
+0

這正是我正在做的。正如我所說的,問題不在於ui組件。收集負載級別上出現錯誤數據。 – amr

0

您的服務器時區是:你可以通過這個代碼顯示通過您的商店的時區列paid_at與後端的magento時區設置不同。

在直接sql查詢您的服務器時區獲得結果。 和在magento集合中,相同的數據將根據設置的時區進行轉換。