AngularJS插值中时间戳转换日期错误问题排查
问题原因与解决方案
嗨,这个问题我太熟啦!你遇到的是AngularJS date过滤器的一个常见小坑:
核心问题
你使用的时间戳1519347000是秒级时间戳,但AngularJS的date过滤器默认只认毫秒级时间戳。当你直接把秒级时间戳丢进去时,它会把这个数值当作毫秒来解析,所以计算出来的时间就是Unix纪元(1970年1月1日)之后的1519347秒,也就是你看到的Jan 18 1970, 04:02。
两种解决办法
- 直接在视图中转换:在插值表达式里把时间戳乘以1000,转换成毫秒级再传给过滤器:
{{$ctrl.myTimestamp * 1000 | date:'MMM d y, hh:mm'}} - 在控制器中提前处理:如果不想在视图里写计算逻辑,可以在控制器里先把时间戳转成毫秒:
之后视图里就可以直接用原来的过滤器写法啦:// 控制器内处理示例 this.myTimestamp = 1519347000 * 1000;{{$ctrl.myTimestamp | date:'MMM d y, hh:mm'}}
验证一下
把1519347000乘以1000得到1519347000000,这个毫秒级时间戳对应的正好是你预期的February 23, 2018 12:50,完全正确~
小提醒:很多后端接口返回的时间戳都是秒级的,前端处理的时候一定要注意和JS的时间单位(毫秒)对齐哦!
内容的提问来源于stack exchange,提问作者dadsa
相关产品推荐
相关产品推荐

