You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用AngularJS date过滤器处理日期字符串返回错误月份问题

问题原因

AngularJS的date过滤器对输入值有严格的类型要求,仅支持原生Date对象、毫秒级时间戳数字、符合ISO 8601规范的完整日期字符串三类输入。
你截取得到的两位字符串"04"传入过滤器后,会被识别为数值4,当成4毫秒的时间戳计算,对应时间为1970年1月1日00:00:00.004,输出月份自然固定为Jan,和你预期的4月没有关联。

解决方法

这里提供两种可直接落地的修正方案:

  • 方案1:视图内直接转换格式
    先把接口返回的定长日期字符串拼接为ISO标准格式,再调用date过滤器输出目标格式,不需要修改控制器逻辑:
    {{ (item.default['Date modified'].replace(/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/, '$1-$2-$3T$4:$5:$6')) | date:'MMM YYYY' }}
    
  • 方案2:控制器预定义月份映射(性能更优)
    如果项目中频繁用到月份简写转换,可以在控制器中预定义映射数组,视图直接取值即可,避免过滤器的运行开销:
    控制器代码:
    // 按顺序对应1-12月的简写
    $scope.monthShortList = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
    
    视图代码:
    {{ monthShortList[+item.default['Date modified'].substr(4,2) - 1] }} {{ item.default['Date modified'].substr(0,4) }}
    

内容的提问来源于stack exchange,提问作者CMartins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 19:54:04