Angular:日期过滤器添加时区,如何输出UTC?

时间:2014-02-14 15:11:00

标签: angularjs datetime

我正在使用日期过滤器以特定格式呈现unix时间戳。我注意到过滤器会将当地时区添加到输出中。

有没有办法简单地输出确切的时间戳,而不添加任何时区信息?

输入:

talk.content.date_and_time = 1400167800 

(是05/15/14 @ 3:30:00 pm UTC)

代码:

{{talk.content.date_and_time*1000 | date:'dd-M-yyyy H:mm Z'}}

输出:

15-5-2014 17:30 +0200

如何输出15:30而不是17:30?

4 个答案:

答案 0 :(得分:82)

由于版本1.3.0 AngularJS引入了额外的过滤器参数timezone,如下所示:

{{ date_expression | date : format : timezone}}

但在版本1.3.x中,只有支持的时区为UTC,可以按如下方式使用:

{{ someDate | date: 'MMM d, y H:mm:ss' : 'UTC' }}

由于版本1.4.0-rc.0 AngularJS也支持其他时区。我没有测试所有可能的时区,但这里有例如你如何在日本标准时间(JSP,GMT +9)获得约会:

{{ clock | date: 'MMM d, y H:mm:ss' : '+0900' }}

Here您可以找到AngularJS日期过滤器的文档。

注意:这仅适用于Angular 1.x

这是working example

答案 1 :(得分:27)

' Z'是什么增加了时区信息。至于输出UTC,这似乎是一些混乱的主题 - 人们似乎倾向于moment.js

借用这个answer,你可以在没有moment.js的情况下做这样的事情:

<强>控制器

var app1 = angular.module('app1',[]);

app1.controller('ctrl',['$scope',function($scope){

  var toUTCDate = function(date){
    var _utc = new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(),  date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
    return _utc;
  };

  var millisToUTCDate = function(millis){
    return toUTCDate(new Date(millis));
  };

    $scope.toUTCDate = toUTCDate;
    $scope.millisToUTCDate = millisToUTCDate;

  }]);

<强>模板

<html ng-app="app1">

  <head>
    <script data-require="angular.js@*" data-semver="1.2.12" src="http://code.angularjs.org/1.2.12/angular.js"></script>
    <link rel="stylesheet" href="style.css" />
    <script src="script.js"></script>
  </head>

  <body>
    <div ng-controller="ctrl">
      <div>
      utc {{millisToUTCDate(1400167800) | date:'dd-M-yyyy H:mm'}}
      </div>
      <div>
      local {{1400167800 | date:'dd-M-yyyy H:mm'}}
      </div>
    </div>
  </body>

</html>

这里plunker与它一起玩

另请参阅thisthis

另请注意,使用此方法,如果您使用&#39; Z&#39;从Angular的日期过滤器中,它似乎仍将打印您当地的时区偏移量。

答案 2 :(得分:0)

日期过滤器始终使用本地时区格式化日期。您必须根据DategetUTCXxx()方法或moment.js等库来编写自己的过滤器。

答案 3 :(得分:0)

我刚刚为我的应用程序使用了getLocaleString()函数。它应该调整语言环境的常用时间格式,所以没有+0200等。当然,控制字符串宽度的可能性会更小。

var str = (new Date(1400167800)).toLocaleString();