今天中午有客户反映我们的产品,页面上所有关于时间日期查询的功能全部无法使用,刚才查出来,只有部分客户升级了最新的 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 么,下一个版本会把这个改回来么?
1
IsaacYoung 2021-01-28 15:24:06 +08:00
你这个时间获取的方式不太合适吧 不是有一对 get 方法吗
|
2
easonHHH 2021-01-28 15:32:11 +08:00
用 moment.js 格式化时间?.....
|
3
yamedie 2021-01-28 15:34:13 +08:00
用 moment.js 或 Intl.DateTimeFormat
|
4
wangxiaoaer 2021-01-28 15:34:29 +08:00
1 我觉得是 bug
2 你们明显太不专业了,不要把锅全部甩给前端,接口调用的时候日期格式怎么能用 localstring 这种?用户换个地区不照样挂?这是设计的锅。 3 尝试给 chrome 提 issue 试试看。 |
5
luofeii 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 })) |
6
wxiao333 OP @wangxiaoaer 谢谢建议,确实是我们不够专业,现在在修改了。
|
8
ShinichiYao 2021-01-28 16:23:56 +08:00
Chrome 88 版大更新造成我一堆 ftp 连接废掉找谁说理去
|
9
dswyzx 2021-01-28 16:25:20 +08:00 via iPhone
原生 js 的方法还有这风险,学到了
|
10
12101111 2021-01-28 16:34:18 +08:00
Firefox 也是这样,日期和时间之间没有空格,应该是 icu 68.2 的 bug
|
11
hahastudio 2021-01-28 16:41:14 +08:00
|
12
easylee 2021-01-28 16:50:05 +08:00
对字里行间透露出来的数落很是头疼......
|