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

AngularJS中如何将指定格式字符串日期转为16 April 2018格式?

解决AngularJS中日期字符串无法用date过滤器格式化的问题

嘿,我懂你遇到的麻烦了——用AngularJS自带的date过滤器处理日期字符串时完全没效果,对吧?这其实是个常见的小坑:AngularJS的date过滤器只对真正的Date对象生效,而你传入的是字符串格式的日期,所以过滤器直接原样返回了,根本没做格式化处理。

下面给你两种实用的解决方案:

方案一:在控制器里预处理,把字符串转成Date对象

在你拿到product数据之后,先把每个product的createdDate字符串转换成Date对象,之后再用date过滤器就正常了:

// 假设你从接口或数据源拿到了products数组
products.forEach(product => {
  // 你的日期字符串格式符合标准,直接用new Date()就能解析
  product.createdDate = new Date(product.createdDate);
});

然后在模板里使用正确的格式字符串(注意要得到16 April 2018,得用dd MMMM yyyy,而不是你之前的dd MM, yyyy):

{{product.createdDate | date : 'dd MMMM yyyy'}}

方案二:自定义过滤器(不修改原始数据)

如果你不想改动原始的product数据,可以自定义一个过滤器,先把字符串转成Date对象,再调用内置的date过滤器:

// 在你的AngularJS模块里注册自定义过滤器
angular.module('yourAppModule').filter('parseAndFormatDate', function($filter) {
  return function(dateString, format) {
    // 尝试把字符串转成Date对象
    const dateObj = new Date(dateString);
    
    // 检查转换是否成功(避免无效日期导致显示NaN)
    if (isNaN(dateObj.getTime())) {
      return dateString; // 转换失败就返回原字符串
    }
    
    // 用内置date过滤器格式化
    return $filter('date')(dateObj, format);
  };
});

然后在模板里这样用:

{{product.createdDate | parseAndFormatDate : 'dd MMMM yyyy'}}

小细节提醒

你之前用的格式字符串dd MM, yyyy会输出16 04, 2018,如果要显示英文月份全称(比如April),一定要用MMMM作为月份占位符哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:40:32