今天中午有客户反映我们的产品,页面上所有关于时间日期查询的功能全部无法使用,刚才查出来,只有部分客户升级了最新的 chrome 版本 88.0.4324.104 (正式版本)之后出现了这种现场,于是我也进行了升级。 升级后果然关于时间的页面都出了问题,看上去肯定是前端的原因,查代码后发现,前端写的获取日期时间字符串的方法是
new Date().toLocaleString('zh', { hour12: false })
chrome 更新前的结果是
"2021/1/28 15:03:50"
chrome 更新后变成了
"2021/1/2815:03:50"
少掉的这一个空格导致我们系统所有跟时间日期选择相关的控件,跟后端的接口 全部挂掉。。。
由于之前的前端是转行过来的可能不太专业,没有使用时间戳,导致现在出现这样的局面,我们的系统现在前前后后有十几个版本,部署在上百台服务器上(版本各不相同),更新工作量巨大。请教各位有经验的大神这算是 chrome 的 bug 么,下一个版本会把这个改回来么?
|  |      1IsaacYoung      2021-01-28 15:24:06 +08:00 你这个时间获取的方式不太合适吧 不是有一对 get 方法吗 | 
|      2easonHHH      2021-01-28 15:32:11 +08:00 用 moment.js 格式化时间?..... | 
|  |      3yamedie      2021-01-28 15:34:13 +08:00 用 moment.js 或 Intl.DateTimeFormat | 
|      4wangxiaoaer      2021-01-28 15:34:29 +08:00 1 我觉得是 bug 2 你们明显太不专业了,不要把锅全部甩给前端,接口调用的时候日期格式怎么能用 localstring 这种?用户换个地区不照样挂?这是设计的锅。 3 尝试给 chrome 提 issue 试试看。 | 
|      5luofeii      2021-01-28 16:19:17 +08:00 重写一下 Date.prototype.toLocaleString 方法 var one = new Date().toLocaleString; var day = new Date().getDate(); var month = new Date().getMonth() + 1; Date.prototype.toLocaleString = function(y, z){ var str = one.call(this, y, z); // todo 这里判断一下 str 是否正常 var reg = new RegExp(`\/[0-9]+\/${day}`) return str.replace(reg, '/' + month + '/'+ day+' '); } console.log(new Date().toLocaleString('zh', { hour12: false })) | 
|      6wxiao333 OP @wangxiaoaer 谢谢建议,确实是我们不够专业,现在在修改了。 | 
|      8ShinichiYao      2021-01-28 16:23:56 +08:00 Chrome 88 版大更新造成我一堆 ftp 连接废掉找谁说理去 | 
|  |      9dswyzx      2021-01-28 16:25:20 +08:00 via iPhone 原生 js 的方法还有这风险,学到了 | 
|  |      1012101111      2021-01-28 16:34:18 +08:00 Firefox 也是这样,日期和时间之间没有空格,应该是 icu 68.2 的 bug | 
|  |      11hahastudio      2021-01-28 16:41:14 +08:00 | 
|  |      12easylee      2021-01-28 16:50:05 +08:00 对字里行间透露出来的数落很是头疼...... |