原创声明:本文为作者原创,未经允许不得转载,经授权转载需注明作者和出处
这两天尝试在新的系统,把日期字段(createTime & updateTime..)设置成bigint(Long)类型,把时间按yyyyMMddHHmmss入库。 然后写了前端后端的交互,确实体验挺好
多数据库适配友好(假如有的话),就像查询oracle的时间范围,就是to_char一大段,真的非常脑残加恶心,用Long类型,可以非常直观认知的写出高精度的时间范围查询
例如:查询2019-10-01 下午三点到五点的数据
select * from table where create_time >=20191001150000 and create_time <= 20191001170000
随便一个开发不用动脑筋就能写出来,心智负担非常低,转行警告风险大大降低
后台代码日期业务处理方便,别问为什么方便,问就是转行警告
入参方便,讲道理字符串yyyyMMddHHmmss入参怎么都比日期入参方便些,不过也得看MVC框架,例如Spring就要加注解标注日期类型格式。
输出方便: 无论用什么mvc框架,几乎都得默认json输出格式为yyyy-MM-dd HHss 然后再交给前端处理~ 这里就不用
跟前端交互:感觉差不多,反正到table组件还是得重新渲染时间格式
这里做下vue+antd处理日期的代码笔记 应该是最佳实践了
//全局过滤方法
Vue.filter('dateformat', function (dataStr, pattern) {
if (!pattern) {
pattern = 'YYYY-MM-DD'
}
return moment(dataStr, 'YYYYMMDDHHmmss').format(pattern)
})
//Table等组件渲染
<!-- 处理日期 -->
<span
slot="dateformat"
slot-scope="text"
>
{{ text | dateformat }}
//{{ text | dateformat('YYYY-MM-DD HH:mm:ss') }}
</span>
//form表单提交处理
function handleSubmit () {
const {
form: { validateFields }
} = this
this.confirmLoading = true
validateFields((errors, values) => {
if (!errors) {
if (values.effectiveDate) {
// 进行转换
values.effectiveDate = values.effectiveDate.format('YYYYMMDDHHmmss')
}
if (values.id != null) {
update(values).then(res => {
setTimeout(() => {
this.visible = false
this.confirmLoading = false
this.form.resetFields()
this.$emit('ok', values)
}, 1000)
})
} else {
save(values).then(res => {
setTimeout(() => {
this.visible = false
this.confirmLoading = false
this.form.resetFields()
this.$emit('ok', values)
}, 1000)
})
}
} else {
this.confirmLoading = false
}
})
}
//回显处理
function edit (record) {
this.visible = true
this.$nextTick(() => {
record.effectiveDate = moment(record.effectiveDate, 'YYYYMMDDHHmmss')
this.form.setFieldsValue(record)
})
},