添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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

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

1

2

3

4

5

6

7

8

9

10

11

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

// console.log(formData);

// console.log(formData.Date1);

// console.log(moment(formData.Date1));<br>

// 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,重新渲染格式

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

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就可以了

M+: this.getMonth() + 1, //月份 d+: this.getDate(), //日 h+: this.getHours(), // 小时 m+: this.getMinutes(), //分 s+: this.getSeconds(), //秒 q+: Math.floor((this.getMonth() + 3 react + antd 搭建 前端 管理 架(***支持响应式***),主要模块分为:菜单、选项卡、面包屑;通过路由监听,实现三个模块之间的联动(同时监听浏览器);状态采用 react -redux进行集中管理。目前只包含 前端 代码,未与后台进行关联实现菜单、用户等权限,若需要,则需进行二次开发。 访问链接:https://blog.csdn.net/weixin_48357332/article/details/124860395 如果你 使用 了类似`window.location.reload()`这样的方法来强制 页面 重新加载,那么无论是否 使用 了`count`状态变量, 页面 被重新加载。在这个例子中,我们 使用 了`useEffect`钩子来在组件挂载时启动一个定时器,在5秒钟后调用`window.location.reload()`方法,强制浏览器重新加载 页面 。只有在 使用 `count`的代码中,当`count`更新时, React 重新渲染组件并更新DOM,从而导致 页面 重新渲染。因此,应该谨慎地 使用 此方法,并在确保必要时才 使用 它。 将每一条数据存在state中,每次点击表格不同行,调用setState更新数据。 查询官网和其他资料(链接见文末) 点击事件改变Modal的visible,从state中取出allowLateSubmission 和allowRepeatSubmission 利用setField 点击“此刻”后,可以看到在 DatePicker 时间 (1)和打印出来的dateString(3)是一致的,是当前的 时间 ;而value(2)是moment数据, 时间 却多了8 小时 。 在线地址:https://codesandbox.io/s/ datepicker -now-tm9g2 2、解决办法 可以看到,onChange的第二个参数已经是正确的 时间 ,如果需要再用newDate... 这 是一个很长的篇章 首先谈谈怎么加快 js 的编译速度吧 在过去7年 时间 里, js 一直都是用于编码 前端 应用程序最常用的语言。这篇并不是告诉你 js 到底有多强大,审题清楚很重要。如果一个网页内容未能在2秒钟内完成加载,那么访问者就 离开,就算你的网站设计有多么的漂亮、厉害都白搭。这就需要优化 js 代码以获得更好的性能。开始喽 尽量减 对DOM的访问 每次网页加载的背后其实都是在构建一棵DOM树,如果你的程序需要多次访问DOM元素,可以改成访问一次DOM树并将其用作局部变量。如果从DOM树中删除此值,则该变量也需要设 React Native 是目前流行的跨平台移动应用开发 架之一。通过采用不同的方法进行混合移动应用开发,它不 生成原生 UI 组件,而是基于 React React Native 是一个用于构建基于 Web 的交互界面的 JavaScript 库,因此 有更丰富的 UI 体验效果,同时也能够很好地调用底层 架的UI 使用 React Native 已经成为一种流行的移动开发技术,它提供了一个 使用 JavaScript 构建原生跨平台移动应用的强大 架。 在做原生开发时,一般我们 有一些加载H5网页的需求, Date.prototype. form at = function (fmt) { let o = { "M+": this.getMonth() + 1, //月份 "d+": this.getDate(), //日 "h+": this.getHours(), // 小时 "m+": this.getMinutes(), 前言:开发过程 使用 这个真的踩过的最大的深坑,找了很久也没有没有找到解决方式。 第一想到的解决思路是,在onchange里的做处理,减8 小时 ,不过后来发现这个是个天真的想法, 导致通过 日期 选择 了8 小时 , 第二想,能过QQ学习群,有大神指导, 使用 UTC方案,操作之后发现,同样有第一种想法的问题。 最无语的,有码友也试了一下,居然他那边是正常的,不存在我这个问题,我TMD无语加崩溃。再加度娘了很... 使用 moment. js 格式化本地 时间 戳时多出了8 小时 问题,这8 小时 是本地 时间 与格林威治标准 时间 (GMT)的时差 *例如:moment(5*60*1000),将5分钟的本地 时间 戳转为 日期 ,结果 多出8 小时 ,就是解决此问题。 2、解决方案 fixTimezoneOffset = () => { const date = new Da...