【问题标题】:Moment.js amDateFormat always returning date from 1970Moment.js amDateFormat 总是返回 1970 年的日期
【发布时间】:2016-05-07 17:01:18
【问题描述】:

http://plnkr.co/edit/5zxXEEz30t51yGhgYWVF?p=preview

我在我的应用中使用Moment.jsAngular-moment

出于某种原因,它将我所有的纪元时间戳转换为 1970 年以来的同一日期。

<td class="timespan">{{tag.added_epoch | amDateFormat:'dddd, MMMM Do YYYY'}}</td>

这就是tag.added_epoch 的值是added_epoch: 1432252800

但是当我在线转换时,我得到了正确的日期:

知道为什么我的过滤器将1432252800 变成1970 年1 月17 日星期六

【问题讨论】:

  • 你试过moment.unix()在角度时刻它会是<span am-time-ago="message.unixTime | amFromUnix">
  • 我收到此错误Unknown provider: amFromUnixFilterProvider <- amFromUnixFilter 看起来我需要使用不同版本的库 :( 但我的数字是否正确?
  • 我快速浏览了 moment.js,如果我只使用 moment(1432252800),我会得到 1970 年我使用 unix 方法得到 1970 年的日期我得到了 2015 年的日期,所以你的数字似乎是正确的。来自 angular-moment 文档:注意:要使用 amFromUnix,请安装 angular-moment 版本 1.0.0-beta.3
  • @Arminmsg 怎么样?他们没有建立起来:(github.com/urish/angular-moment/releases哦nvm在CDN上找到了它cdnjs.cloudflare.com/ajax/libs/angular-moment/1.0.0-beta.3/…
  • 最新版本是1.0.0-beta3,看标签

标签: javascript angularjs timestamp momentjs angular-moment


【解决方案1】:

我只是快速总结问题和解决方案。

Moment.js 提供了两种不同的方法来根据 unix 时间戳创建日期 moment(1432252800)moment.unix(1432252800)

两者同时开始(UTC 时间 1970 年 1 月 1 日凌晨 12 点),但 moment() 使用毫秒数,大约是 17 天,moment.unix() 使用秒数。

angular-moment 支持amFromUnix 过滤器,参见source

你可以通过以下方式使用它

<time am-time-ago="myDate|amFromUnix">
{{myDate|amFromUnix|amCalendar}}

【讨论】:

    【解决方案2】:

    尝试编写自己的过滤器,如下所示:

     newapp.filter("fromTimestamp", function(){
       return function(timestamp, format){
         return moment.unix(timestamp).format(format)
       }
     })
    

    并使用它们

    <p class="date">{{date | fromTimestamp:'dddd, MMMM Do YYYY'}}</p>
    

    Plunker demo

    【讨论】:

    • 谢谢! +1 超级干净 :) Arminmsg 确实回答了我的确切问题,但您的解决方案实际上可能用于替换我们的代码。
    • @LeonGaban 感谢 +1)
    猜你喜欢
    • 2020-06-18
    • 2023-04-09
    • 2016-03-29
    • 1970-01-01
    • 2022-01-11
    • 2023-03-03
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多