Magento是个神奇的系统,跟国内的框架是不一样的,订单/用户的时间也会是有所差异,当你开发过程中如果不涉及到时间的问题,那还好,不会觉得很折腾,相反,要是涉及到时间的查询,或是计划任务,你就会觉得很乱,magento的时间到时是什么时区怎么算才对?

从M1到M2,涉及时间相关的功能也真不少了,各种折腾,也就记录一下Magento的时间吧

Magento的时间可以从3个方面来看

1、数据库时间

2、代码时间(对应后台时间)

3、所在地的时间(中国也就是北京时间)

如果站点是用于国内

时区设置为北京,代码时间也就对应着所在地时间,做计划任务相关功能时,代码里面写的时间对应电脑的时间做调试以及线上发版是完全没问题的,能按国内的时间走

如果站点是用于国外

这种情况,就会存在3种不同的时间,那么在开发测试时,应该如何区分呢?

如果是通过sql查时间,那么最好是通过magento的方法进行查,而在显示的时候,也通过magento的方法进行输出,这种情况下能确保查数据能准确,显示时间也能正常

M2系统可以通过Magento\Ui\Component\Form\Element\DataType\Date模块的convertDate方法,将时间转换成数据库的时间进行拼接sql,能查出正常的数据。而用Magento\Framework\Stdlib\BooleanUtils的convert方法,能将数据库的时间,转成magento的时区进行时间显示。

以下两个位置的代码,能让你对M2的时间处理有很大的帮助

M2的后台用了UI,进行页面显示核心代码在vendor/magento/module-ui/Component/里面

关于时间的输出则在vendor/magento/module-ui/Component/Listing/Columns/Date.php的prepareDataSource方法里面

筛选功能时间处理则在vendor/magento/module-ui/Component/Filters/Type/Date.php的applyFilter方法里面

注:convertDate必须以m/d/Y的格式传参,要不然会产生错误的时间截(14时与15时可能会产生1天的时间差)