【问题标题】:Custom formatting for a time using Moment.js使用 Moment.js 自定义格式化时间
【发布时间】:2015-08-25 06:24:08
【问题描述】:

我在使用 moment.js 格式化时间时遇到了困难。我决定尝试angular-moment,但遇到了一些限制,在查看了moment.js 的文档之后,似乎创建一个使用moment 的自定义指令会好很多。这是我的问题,我对基本指令有一些经验和知识,但我不确定如何继续创建使用moment 格式化日期/时间的指令。所以,以下是我要遵守的规则:

不到 1 分钟前:打印为 a few seconds ago 超过 1 分钟前 && 不到 1 小时前:打印为 X minutes ago 1个多小时前:打印为h:mm a 昨天(这个应该比较两天看是今天还是昨天):打印为Yesterday 比昨天更多:打印为MMM DD

所以我不确定从哪里开始,欢迎任何帮助!

【问题讨论】:

  • 你试过了吗,timefrom? momentjs.com/docs/#/displaying/from
  • @SwarajGiri 我来看看,我最大的问题是将其转换为工作指令
  • @SwarajGiri 处理from 的一种非常低效的方式可能是说如果a.from(b) === 'a day ago' 然后是return 'Yesterday',但这似乎是一种愚蠢的方式。

标签: javascript angularjs momentjs


【解决方案1】:

Moment.js 是必经之路!我建议你使用angular filter 而不是指令。

以下是您可以如何使用 moment.js fromNow function 实现一个:

var fromNow = function () {
        return function (value, format) {
            return moment(value).fromNow();
        };
    };

    angular.module('myApp').filter('fromNow', fromNow);

你只需从 html 调用它:

<span>{{player.activeSince | fromNow}}</span>

【讨论】:

  • 首先,感谢您建议使用带有 fromNow 的过滤器,因为这大大缩短了我的代码,因为我尝试使用之前的指令,当您可以使用它来实现它时,这似乎是不必要的。您将如何编辑此fromNow 函数以添加我上面提到的某些条件?现在使用 Moment 的defaultRelativeTime 设置,例如a month ago 等。我想有一些上述的特殊情况,在某些情况下,我需要从时间中提取一小时或一分钟。感谢您迄今为止的帮助!
  • 你试过配置relativeTime吗? momentjs.com/docs/#/customization/relative-time 如果你有一些增加或减少时间的业务逻辑,它应该在控制器中完成。
  • 我尝试编辑relativeTime 设置,并且我了解如何将其从一个字符串更改为另一个字符串,但我不明白如何将一些业务逻辑添加到@ 987654330@根据我的原帖设置。
  • 据我了解,您希望根据价值采用不同的格式。我认为 fromNow 函数不能单独执行此操作,因此在过滤器中您必须检查值是否大于 24h 并返回 moment().format()
  • 如何检查值是否大于 24 小时?我一直在尝试提取这些信息,但没有运气
猜你喜欢
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多