关于表格时间字段会被展示成1970-01-01 08:00:00的解决办法

a479820787 11天前 58

我在开发过程中遇到一个很奇怪的问题,在本地开发的时候表格中的时间字段如果值为0会被展示成汉字“无”
但是布到服务上会被展示成 1970-01-01 08:00:00
后来排查发现:public/assets/js/require-table.js 中 格式化时间字段的函数代码如下:

  datetime: function (value, row, index) {
                    var datetimeFormat = typeof this.datetimeFormat === 'undefined' ? 'YYYY-MM-DD HH:mm:ss' : this.datetimeFormat;
                    if (isNaN(value)) {
                        return value ? Moment(value).format(datetimeFormat) : __('None');
                    } else {
                        return value ? Moment(parseInt(value) * 1000).format(datetimeFormat) : __('None');
                    }
                },

在这段代码中判断value为假就展示汉字“无” 在我本地环境数据库取到的字段来下是int型的0 js的if判断会认为是假,而服务器上通过sql查询后取出的字段类型转义为了string类型js中的if判断会认为string类型的0为真所以不会展示“无”会吧0格式化为时间格式。
这里有两个解决办法:
一、设置数据库查询出来不转义为string类型保留原格式。
二、将对应代码替换为:

   datetime: function (value, row, index) {
                    var datetimeFormat = typeof this.datetimeFormat === 'undefined' ? 'YYYY-MM-DD HH:mm:ss' : this.datetimeFormat;
                    if (isNaN(value)) {
                        return parseInt(value)!=0 ? Moment(value).format(datetimeFormat) : __('None');
                    } else {
                        return parseInt(value)!=0 ? Moment(parseInt(value) * 1000).format(datetimeFormat) : __('None');
                    }
                },

注意修改js文件后需要按照文档命令行章节中的压缩代码介绍压缩下js代码使其在非debug模式也生效。
这里我直接用的第二种方法,因为我之前遇到过tp5.0放在linux服务器上查出来的数据库数据强制转成string类型,我当时设置相关数据库连接属性(PDO::ATTR_STRINGIFY_FETCHES)也没起作用,最后归结于可能是php版本问题也没深究,如果有debug出是什么原因转换的欢迎下面回复。

最后于 11天前 被a479820787编辑
最新回复 (0)
返回