【问题标题】:AngularJS. Convert tag value (Unix time to human-readable time)角JS。转换标签值(Unix 时间到人类可读的时间)
【发布时间】:2013-07-29 13:11:50
【问题描述】:

我正在从数据库中获取数据并显示它:

    <ul>
       <li ng-repeat="item in items>
          <mydate>{{item.date}}</mydate>
        </li>
    </ul>

{{item.date}} 是一个 Unix 日期,例如 1374843600。如何使用 AngularJS 指令设置日期格式?有可能吗?

当我尝试这样做时,我得到了标签 mydate -{{item.date}} 的值

【问题讨论】:

  • 你能改变你的答案吗?给定的答案将错误的时间显示为 1000 倍。请参阅 Sergei Basharov 的答案。

标签: angularjs angularjs-directive


【解决方案1】:

我遇到了将 unix 时间格式化为从纪元开始的 数或 JavaScript 中使用的 毫秒 数的问题。所以严格来说,AngularJS 不会将 Unix 时间戳转换为日期,而是一个以毫秒为单位的数字,比它大 1000 倍,所以首先你必须将输入的数字乘以 1000,如下所示:

<mydate>{{item.date * 1000 | date:'yyyy-MM-dd HH:mm:ss Z'}}</mydate>

否则你的日期会是错误的。

【讨论】:

  • 感谢您的帖子。我也在为此苦苦挣扎,不知道 angular/javascript 计算的是毫秒而不是秒。 unix 时间是通用的,是大爆炸后的 SECONDS...
  • 我本可以花几个小时来回答你的问题。谢谢!
  • 感谢您的出色回答,正是我所需要的。令人惊讶的是,即使在两年后,这些问题仍然存在! Angular 有时可能真的令人沮丧
  • @stormpat Unix 时间不是 BigBang 之后的秒数。它只是00:00:00 Coordinated Universal Time (UTC), Thursday, 1 January 1970 之后的秒数。我不认为 Bigbang 只发生在 1432897853 秒前。
  • @Neel:我强烈反对!你真的想说服我们在 1970 年 1 月 1 日之前有什么东西吗?!你一定是在开玩笑!
【解决方案2】:

像这样使用date filter格式:

<mydate>{{item.date * 1000 | date:'yyyy-MM-dd HH:mm:ss Z'}}</mydate>

Reference

【讨论】:

  • 没有。否决。这个问题专门要求一个不是毫秒的unix时间戳 - 它是SECONDS。您必须将 unix 时间戳乘以 1000,如下所示:&lt;mydate&gt;{{item.date * 1000 | date:'yyyy-MM-dd HH:mm:ss Z'}}&lt;/mydate&gt;
【解决方案3】:

如果您有 Unix 时间戳,您可能需要将时间戳乘以 1000,因为 Unix 时间戳以秒为单位,而 AngularJs 日期过滤器需要毫秒。

vm.milliseconds = Date('1441981121' * 1000);

然后使用 $filter() 函数

var date = $filter('date')(vm.milliseconds, 'd MMMM yyyy');

或者你可以在 ng-bind 中使用

<span ng-bind="myController.milliseconds | date : 'd MMMM yyyy'"></span>

【讨论】:

    【解决方案4】:

    您应该使用 angular 已经提供的日期过滤器: here

    【讨论】:

      【解决方案5】:
       yourapp.filter('timestampToDate', function () {
          return function (timestamp) {
              var date = new Date(timestamp * 1000);
              var dateObject = date.getFullYear() +'/'+ ('0' + (date.getMonth() + 1)).slice(-2) +'/'+ ('0' + date.getDate()).slice(-2);
              return dateObject;
          };
      });
      

      用法:
      {{timestamp | timestampToDate}}

      【讨论】:

        【解决方案6】:

        有一个指令叫做 rsTime。

            <rs-time start-time="1478513323" digital-format="'ddd MMM d h:mm TT'"></rs-time>
        

        Plunker查看演示。

        以下是不同的时间格式:

         M/d/y -  11/7/2016
        
         HH:mm:ss - 16:02:31 (24hrs formate)
        
         hh:mm:ss TT - 04:03:10 PM
        
         ddd MMM d h:mm TT  - Mon Nov 7 at 4:04 PM
        

        有关文档,请访问Github

        【讨论】:

          猜你喜欢
          • 2022-01-10
          • 2013-01-13
          • 2018-11-03
          • 1970-01-01
          • 2021-03-14
          • 1970-01-01
          • 2018-11-02
          • 2010-12-11
          • 2011-05-26
          相关资源
          最近更新 更多