首页 > 其他分享 >React+Antd在使用form表单提交DatePicker日期框的时候会出现少八小时的情况

React+Antd在使用form表单提交DatePicker日期框的时候会出现少八小时的情况

时间:2023-04-11 18:34:05浏览次数:129  
标签:DatePicker log form formData React Date RegExp fmt

在使用antd做form表单提交的时候,突然发现了一个很有意思的bug.就是在使用datepicker组件日期框的时候会出现提交后少一天的问题

我在网上搜索了许多解决办法,也是困扰了我一天的时间,下面代码.

     let formData = JSON.parse(JSON.stringify(form.getFieldsValue()));

        // console.log(formData);
        // console.log(formData.Date1);
        // console.log(moment(formData.Date1));
// console.log(new Date(formData.Date1)); //debugger; formData.Date1= new Date(formData.quotationDate).format("yyyy-MM-dd hh:mm:ss"); formData.Date2 = new Date(formData.quotationInfoDate).format("yyyy-MM-dd hh:mm:ss");

  在log输出的时候,上面三种方法均不行,new Date的方法虽然可以,但是再提交之后就不行了,提交的数据也会自动减少八个小时,最终找到解决办法,在后面加上format,重新渲染格式

  最后在下面加上这个,在提交的时候就不会出现日期减少的问题了

Date.prototype.format = function (fmt) {
    let o = {
        "M+": this.getMonth() + 1,         //月份
        "d+": this.getDate(),          //日
        "h+": this.getHours(),          //小时
        "m+": this.getMinutes(),         //分
        "s+": this.getSeconds(),         //秒
        "q+": Math.floor((this.getMonth() + 3) / 3), //季度
        "S": this.getMilliseconds()       //毫秒
    };
    if (/(y+)/.test(fmt)) {
        fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    }
    for (let k in o) {
        if (new RegExp("(" + k + ")").test(fmt)) {
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
        }
    }
    return fmt;
};

  在做数据回显的时候,我用的是form.setfiledsvalue(moment(date)),这种方式会导致日期框里面内容错乱

  通过查看官网,发现Antd的DatePicker是基于dayjs的,所以回显数据的时候把moment改为dayjs就可以了

标签:DatePicker,log,form,formData,React,Date,RegExp,fmt
From: https://www.cnblogs.com/LZJHC/p/17307248.html

相关文章

  • ant-design 表单form label不换行
    <a-form:model="rightData"labelAlign="left"><a-form-itemlabel="标识名"><a-inputv-model:value="rightData.name":placeholder="input"/></a-form-item></a-form>......
  • react useMemo
    useMemo是React提供的一个用于优化组件性能的钩子函数。它可以缓存组件的计算结果,并在依赖项发生变化时重新计算。这可以避免在每次组件渲染时都重新计算相同的值,从而提高组件的性能。useMemo的语法如下:constmemoizedValue=useMemo(()=>computeExpensiveValue(a,b),......
  • 通过网页打开winform程序
    winform页面代码:///<summary>///注册表的写入///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidtsmiWriteRegister_Cli......
  • c#之winform—listview中排序 和 ICompare接口和IComparer接口的比较
    要在listview中实现排序,需要用listview.Sorting属性,它接受一个枚举类型的值list_view.Sorting=SortOrder.Ascending;//1为正序>其中None=0,//不排序Ascending=1,//升序Descending=2//降序然后在将ListViewItemComparer这个类的实例......
  • electron+antdesignpro+react
    如果你想在Electron应用中使用AntDesignPro和React框架,可以按照以下步骤进行:创建一个基于React的AntDesignPro项目。将该项目作为渲染进程代码集成到Electron中。根据需要添加Electron的主进程代码。在第二步中,有两种方法将React和AntDesignPro项目......
  • react useCallback
    useCallback是一个ReactHooksAPI,它可以用于优化函数组件的性能,避免不必要的重新渲染。useCallback接受两个参数:第一个参数是一个回调函数,第二个参数是一个依赖数组,用于控制何时重新创建回调函数。当依赖数组中的任何一个值发生变化时,useCallback将返回一个新的回调函数。否......
  • winform程序在不同操作系统下的兼容问题
    建议用.netframework3.5作为生成目标,CPU设置为any来开发,然后在app.config文件里加上<?xmlversion="1.0"encoding="utf-8"?><configuration><startupuseLegacyV2RuntimeActivationPolicy="true"><supportedRuntimeversi......
  • ”file not recognized: file format not recognized“错误,不同架构动态库交叉编译的
    在学习modbus协议时,发现了一些关于libmodbus库编译的问题 我将虚拟机作为客户端,树莓派作为服务器端,分别编写modbus-tcp协议的客户端/服务器端代码在ubuntu虚拟机上可以成功编译,但是在树莓派上会报:”filenotrecognized:fileformatnotrecognized“错误 下面是关于”fil......
  • Terraform 系列-什么是 IaC?
    系列文章......
  • react useEffect的用法
    useEffect是ReactHook的一种,用于在函数组件中定义副作用操作,比如改变DOM、发送网络请求、订阅事件等等。useEffect用于替代类组件中的生命周期方法。它接受一个函数作为第一个参数,在组件更新时调用这个函数,如果你需要在组件挂载时调用这个函数,需要传入一个空数组作为第二个参数;如......