这个 js bug 应该大家都碰到过吧?

2018-06-15 11:06:13 +08:00
 millx

开发 bufpay.com 个人收款接口 的时候,前端需要计算账号过期时间。直接用了:

var t = new Date('2018-06-15 00:00:00');

这样来初始化,在 Chrome 里面是没问题的,但是 Safari 里面就不行了,发现 Safari 支持 :

var t = new Date('2018-06-15');

和这样

var t = new Date('2018-06-15T00:00:00');

Chrome 里面是上面三种格式初始化都支持的。

这个 bug (应该也不能算 Safari 的 bug )应该是 Chrome 做了兼容,Safari 是符合 ECMAScript IOS 8601 关于时间的格式定义的。

6852 次点击
所在节点    程序员
51 条回复
wenzhoou
2018-06-15 11:11:21 +08:00
改用 moment.js 怎么样
hanpei
2018-06-15 11:15:20 +08:00
t = new Date('2018/06/15 00:00:00')
safari 这样可以
以前也遇到过
替换-为 /
millx
2018-06-15 11:15:39 +08:00
@wenzhoou 需求比较简单,注意到这个问题手动处理一下就好啦,不太喜欢引入太多 lib 😆
cccRaim
2018-06-15 11:15:47 +08:00
我好像是 split(' ')分成日期和时间,然后再对日期 split('-')区分出年月日
millx
2018-06-15 11:17:23 +08:00
@hanpei 嗯,这样也可以,或者是把空格替换为 T
opengps
2018-06-15 11:19:15 +08:00
遇到过-有问题,但是没深入研究,于是一直后台返回 2018/06/15 00:00:00 格式给前台 new Date('')。
目前没发现问题
Mutoo
2018-06-15 11:23:07 +08:00
这种必须前端后统一使用 IOS 8601,或者使用 UTC Timestamp 整数,不然遇到不同时区的时候,就蛋疼了。
IOS 8601 的 T 部分是负责时区
millx
2018-06-15 11:23:40 +08:00
@opengps 后台 PHP 么? Python 里面 str(datetime.now()) 直接就是 '2018-06-15 11:23:06.674947' 这种格式
grewer
2018-06-15 11:23:56 +08:00
以前碰到过,反正只要以'/'作为分割,那就没什么问题了
Mutoo
2018-06-15 11:24:17 +08:00
@Mutoo 更正一下,Z 部分负责时区(可选)
zjsxwc
2018-06-15 11:25:22 +08:00
moment.js +1
millx
2018-06-15 11:26:09 +08:00
@Mutoo timestamp 可读性不太好 /(ㄒoㄒ)/~~
agagega
2018-06-15 11:28:50 +08:00
同样的坑也出现在 iOS 平台的微信小程序里
millx
2018-06-15 11:31:13 +08:00
@agagega 就是不同 js 编译器有差异,容易被忽略
jin5354
2018-06-15 11:34:05 +08:00
原生 Date 兼容性问题多了,非 IOS 8601 标准格式,有的端直接报错,移动端某些版本还会出现 8 小时误差(不标 Z 的话有的按东八区算,有的按零时区算),如果跨端多非标准格式还是建议用个库
zhouyg
2018-06-15 11:35:21 +08:00
建议覆盖掉原生 Date 类型,改为自己实现或模块
zenxds
2018-06-15 11:36:02 +08:00
new Date(时间戳)
new Date('2014/07/12 12:34:35')
new Date(year, month, day[, hour[, minute[, second[, millisecond]]]])

其他的都有兼容问题
millx
2018-06-15 11:52:36 +08:00
@zenxds 统一用这几种就够了
Cbdy
2018-06-15 11:55:43 +08:00
不要用时间戳数字,不要用奇奇怪怪的格式,数据传输统一用字符串,用 ISO8601 格式!
kslr
2018-06-15 11:57:35 +08:00
用时间戳处理只有展示格式化可以避免很多奇怪的问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/463322

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX