Date 对象和关于时间的一些坑

DebugMi 发布于 2018-01-06编辑于 2018-01-07阅读:2306

有时候用 Date.parse 方法去记录一些缓存时间的时候,发现不同设备或者浏览器返回的值是不一样的。

有这四个时间字符串:

const str1 = '1970-01-01 00:00:01'
const str2 = '1970/01/01 00:00:01'
const str3 = '1970-01-01T00:00:01'
const str4 = '1970-01-01T00:00:01Z'

Chrome 里分别用 Date.parse 去解析返回的是:

-28799000, -28799000, -28799000, 1000

安卓的微信浏览器:

-28799000, -28799000, 1000, 1000

iOS 的微信浏览器:

NaN, -28799000, 1000, 1000

etc.

可以看出其他的格式均可能有兼容问题。并且会带有当前时区去解析成 UTC 时间。

str4 是 ISO_8601 标准,最后的 Z 代表不带任何时区信息。因此是最稳的!

为了保证更稳,前端传给后端的数据不应该用时间戳,而应该用约定好的时间字符串

另外 web 的原生组件 input 是时间类型的时候,格式也需要固定为 1970-01-01T00:00:01。

<input type='datetime-local' value='1970-01-01T00:00:01' />
0