关于iview组件库的datePicker日期组件的坑

1.  formData中包含了时间对象:

formData = {  joinEndTime :  new Date(1563811200000)  }  // 其实是 2019-7-23 00.00

2.  使用JSON.parse(JSON.stringify( formData ))复制之后变成了时间字符串

formData = {  joinEndTime : "2019-07-22T16:00:00.000Z"  }  //UTC 时区的 ISO 格式,也是2019-7-23 00.0只不过是格式不同

3.  再使用iview的datePicker组件绑定这个复制之后的值,显示出来的时间错误

type="datetime"

    v-model="formData.joinEndTime"

/>

究其原因:

1.使用JSON.parse(JSON.stringify( formData ))复制变成时间字符串的原因??

因为JSON.stringify触发的就是Date对象的内置toJSON方法,返回 UTC 时区的 ISO 格式日期字符串

比如,JSON.stringify(new Date("2019-07-29  ")) //结果是这种格式  ""2019-07-28T16:00:00.000Z""

2.使用datepicker组件绑定UTC 时区的 ISO 格式日期字符串,识别错误??

下面是用iviewrun写的demo,可以手动改变datePicker v-mode的time1 / time2来查看区别

https://run.iviewui.com/UbosMDGE

这个问题的根本原因还没时间去关注,关于datepicker组件的源码解析后续会更新哒!

解决办法:

1. 使用lodash的cloneDeep( )深拷贝(递归拷贝)

new Date被复制之后依然是时间对象,

下面是lodash的官网:

https://www.lodashjs.com/docs/latest#_clonedeepvalue

2. 将UTC格式的时间字符串new Date('')之后转成标准时间格式,不建议

这是我第一次写的文章,我甚至没找到代码块的格式在哪里???但还是希望大家多多支持啊!如果有人愿意告诉我咋写代码块格式我会很开心哦,么么哒!

你可能感兴趣的:(关于iview组件库的datePicker日期组件的坑)