这个 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 关于时间的格式定义的。

6886 次点击
所在节点    程序员
51 条回复
millx
2018-06-15 16:35:15 +08:00
@metrxqin 前端后端都需要啊,为什么不安全?
millx
2018-06-15 16:37:58 +08:00
@metrxqin 前端只是用来计算显示的啦,后端肯定需要自己重新计算的,不要太紧张 😆
Cynic222
2018-06-15 16:38:41 +08:00
@wenzhoou #1 moment 太大,现在有个 dayjs,一样的 api
ernest
2018-06-15 16:41:53 +08:00
ISO 8601 date string 格式了解下:2018-06-15T00:00:00 是 js Core 支持的。https://en.wikipedia.org/wiki/ISO_8601
Building
2018-06-15 16:47:32 +08:00
js 没有 bug,如果有的话,那是 feature。
iamkun
2018-06-15 17:17:04 +08:00
@millx 其实这几个时间字符串都不是标准时间,所以呢不同浏览器的支持情况是不一样的。 推荐前后统一用 ISO 时间或者时间戳,省心省力

当然,欢迎体验 dayjs , 2kb 类似 moment.js 的时间库,欢迎提出各种改进意见。
feder
2018-06-15 17:31:47 +08:00
LS dayjs 作者
wenzhoou
2018-06-15 18:22:16 +08:00
恩。那我下次项目也用 dayjs
millx
2018-06-15 20:07:13 +08:00
@iamkun (*@ο@*) 哇~ dayjs 作者 😆
scplay
2018-06-16 09:38:03 +08:00
第一次用 dayjs 发现 dayjs 没有解决 iso8601 在 safari 上的问题,果断换回 moment,
iamkun
2018-06-16 15:59:09 +08:00
@scplay 请问在 safari 上是什么问题呢

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

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

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

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

© 2021 V2EX