美文网首页
前端坑-初始化日期导致 el-date-picker value

前端坑-初始化日期导致 el-date-picker value

作者: 高节 | 来源:发表于2022-11-01 10:16 被阅读0次

    需求:在打开表单页面时,需要给一个初始时间,默认为当天早上9点

    1.1.时间标签

    <el-form-item prop="planStartTime" label="预计开始时间:" style="font-weight: bold">
      <el-date-picker v-model="saveForm.planStartTime" type="datetime" :picker-options="pickerOptions" value-format="yyyy-MM-dd HH:mm:ss" placeholder="请选择预计开始时间" />
    </el-form-item>
    

    1.2.初始化代码

    const today = new Date()
    this.saveForm.planStartTime = new Date(today.getFullYear(), today.getMonth(), today.getDate(), 9)
    

    1.3.提交效果:然而请求体日期格式不对,后台报错

    {
      "id": null,
      "name": "是大大大",
      "detail": null,
      "planStartTime": "2022-11-01T01:00:00.000Z",
      "planCompleteTime": "2022-11-01T14:00:00.000Z",
      "remark": null
    }
    

    原因分析
    由于初始化时,给日期设置的类型为 Date,所以如果不在组件上面点击,那么提交的时候还是初始化的 Date 类型,即使设置了 value-format 也不会生效

    解决方案
    在初始化的时候,就设置为 value-format 的格式,这样即使不在组件上面点击,提交的时候也是 value-format 格式,这样后台解析就不会出问题

    改进后代码

    2.1.自定义日期工具类

      /**
       * 获取当天指定第几点
       * 比如获取当天九点:hour=9,返回 2022-11-01 09:00:00
       */
      getTimeStrByHour: (hour) => {
        const today = new Date()
        const year = today.getFullYear()
    
        // 月份
        let month = today.getMonth() + 1
        if (month < 10) month = `0${month}`
    
        // 日期
        let day = today.getDate()
        if (day < 10) day = `0${day}`
    
        // 组装
        return `${year}-${month}-${day} ${hour}:00:00`
      }
    

    2.2.初始化代码

    this.saveForm.planStartTime = dateUtil.getTimeStrByHour('09')
    

    2.3.点击提交,日期格式正常,ok

    {
      "id": null,
      "name": "搜索",
      "detail": null,
      "planStartTime": "2022-11-02 09:00:00",
      "planCompleteTime": "2022-11-02 22:00:00",
      "remark": null
    }
    

    相关文章

      网友评论

          本文标题:前端坑-初始化日期导致 el-date-picker value

          本文链接:https://www.haomeiwen.com/subject/kpsrtdtx.html