使用带有UTC日期的AngularJS日期过滤器

Fra*_*isc 71 datetime angularjs angularjs-filter

我有一个以毫秒为单位的UTC日期,我将其传递给Angular的日期过滤器以进行人工格式化.

{{someDate | date:'d MMMM yyyy'}}
Run Code Online (Sandbox Code Playgroud)

太棒了,除了someDate在UTC中,日期过滤器认为它在当地时间.

我如何告诉Angular someDate是UTC?

谢谢.

小智 103

看起来像AngularJS人们正在1.3.0版本中工作.您需要做的就是: 'UTC'在格式字符串后添加.就像是:

{{someDate | date:'d MMMM yyyy' : 'UTC'}}
Run Code Online (Sandbox Code Playgroud)

正如您在文档中看到的那样,您也可以在这里玩它: Plunker示例

顺便说一句,我认为Z参数存在一个错误,因为即使使用"UTC",它仍会显示本地时区.

  • 我认为PO想要的是将UTC日期格式化为本地格式字符串,恰恰相反. (6认同)

oss*_*sek 55

类似问题在这里

我会重新发布我的回复并建议合并:

输出UTC似乎是一些混乱的主题 - 人们似乎倾向于时刻.js.

借用这个答案,你可以做一些这样的事情(即使用一个用UTC构造函数创建日期的转换函数)而不用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;

  }]);
Run Code Online (Sandbox Code Playgroud)

模板

<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>
Run Code Online (Sandbox Code Playgroud)

这里的plunker发挥它

另见这个这个.

另请注意,使用此方法,如果使用Angular的日期过滤器中的"Z",它似乎仍将打印您的本地时区偏移量.


Cha*_*tin 11

这是一个过滤器,它将采用日期字符串OR javascript Date()对象.它使用Moment.js并可以应用任何Moment.js转换函数,例如流行的'fromNow'

angular.module('myModule').filter('moment', function () {
  return function (input, momentFn /*, param1, param2, ...param n */) {
    var args = Array.prototype.slice.call(arguments, 2),
        momentObj = moment(input);
    return momentObj[momentFn].apply(momentObj, args);
  };
});
Run Code Online (Sandbox Code Playgroud)

所以...

{{ anyDateObjectOrString | moment: 'format': 'MMM DD, YYYY' }}
Run Code Online (Sandbox Code Playgroud)

将于2014年11月11日展出

{{ anyDateObjectOrString | moment: 'fromNow' }}
Run Code Online (Sandbox Code Playgroud)

将在10分钟前显示

如果需要调用多个时刻函数,可以将它们链接起来.这将转换为UTC,然后格式化......

{{ someDate | moment: 'utc' | moment: 'format': 'MMM DD, YYYY' }}
Run Code Online (Sandbox Code Playgroud)