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

AngularJS插值语法中如何将时间戳转换为日期格式?

在AngularJS里直接把时间戳转成日期格式的解决办法

当然可以实现啦!不过你当前的写法没生效,大概率是踩了几个常见的小坑,咱们一步步来捋清楚:

首先得确保Moment.js能被AngularJS识别

AngularJS默认不认全局的moment对象,你得先把它整合到AngularJS的生态里,有两种简单的方式:

方法1:手动把moment注册成AngularJS常量

在你的模块代码里加这么一段:

angular.module('你的应用模块名')
  .constant('moment', window.moment);

注册完之后,不管是控制器里注入还是模板里直接用,AngularJS都能找到moment了。

方法2:用专门的angular-moment封装库

这是更省心的选择,引入angular-moment的脚本后,在模块里添加依赖:

angular.module('你的应用模块名', ['angularMoment']);

它自带了适配AngularJS的过滤器,用起来更顺手。

正确的模板写法(两种可选)

写法1:直接用moment(已注册常量的前提下)

先确认$ctrl.myTimestamp是有效的时间戳数值,如果是字符串类型的话记得转成数字,然后模板里这么写:

{{ moment(Number($ctrl.myTimestamp)).format('MMMM Do YYYY, h:mm:ss a') }}

哦对了!如果你的时间戳是秒级的(比如你举的1519357500),得乘以1000转成毫秒,因为moment默认吃毫秒级时间戳:

{{ moment($ctrl.myTimestamp * 1000).format('MMMM Do YYYY, h:mm:ss a') }}

写法2:用angular-moment的过滤器(推荐)

用过滤器的话代码更简洁,还自动处理类型和时间戳单位的问题:

  • 处理秒级时间戳:先过amFromUnix过滤器,再用amDateFormat格式化
{{ $ctrl.myTimestamp | amFromUnix | amDateFormat:'MMMM Do YYYY, h:mm:ss a' }}
  • 如果是毫秒级时间戳,直接用amDateFormat就行:
{{ $ctrl.myTimestamp | amDateFormat:'MMMM Do YYYY, h:mm:ss a' }}

最后排查几个常见坑

  • 打开浏览器控制台看看有没有报错,比如moment is not defined——这说明你没正确引入moment或者没注册成AngularJS的服务;
  • 确认$ctrl.myTimestamp不是undefined或者null,可以先在模板里打印{{ $ctrl.myTimestamp }}看看值对不对;
  • 区分秒级和毫秒级时间戳,这个是最容易踩的坑!

举个完整的小例子:
控制器代码:

angular.module('myDemoApp', ['angularMoment'])
  .controller('DemoCtrl', function() {
    this.myTimestamp = 1519357500; // 这是秒级时间戳
  });

模板代码:

<div ng-controller="DemoCtrl as $ctrl">
  转换后的日期:{{ $ctrl.myTimestamp | amFromUnix | amDateFormat:'MMMM Do YYYY, h:mm:ss a' }}
</div>

运行后就能正确显示成 February 23rd 2018, 12:45:00 pm 啦!


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:40:25