Using AngularJS date filter with UTC date Using AngularJS date filter with UTC date angularjs angularjs

Using AngularJS date filter with UTC date


Seems like AngularJS folks are working on it in version 1.3.0.All you need to do is adding : 'UTC' after the format string. Something like:

{{someDate | date:'d MMMM yyyy' : 'UTC'}}

As you can see in the docs, you can also play with it here:Plunker example

BTW, I think there is a bug with the Z parameter, since it still show local timezone even with 'UTC'.


Similar Question here

I'll repost my response and propose a merge:

Output UTC seems to be the subject of some confusion -- people seem to gravitate toward moment.js.

Borrowing from this answer, you could do something like this (i.e. use a convert function that creates the date with the UTC constructor) without moment.js:

controller

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;  }]);

template

<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>

here's plunker to play with it

See also this and this.

Also note that with this method, if you use the 'Z' from Angular's date filter, it seems it will still print your local timezone offset.


Here is a filter that will take a date string OR javascript Date() object. It uses Moment.js and can apply any Moment.js transform function, such as the popular '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);  };});

So...

{{ anyDateObjectOrString | moment: 'format': 'MMM DD, YYYY' }}

would display Nov 11, 2014

{{ anyDateObjectOrString | moment: 'fromNow' }}

would display 10 minutes ago

If you need to call multiple moment functions, you can chain them. This converts to UTC and then formats...

{{ someDate | moment: 'utc' | moment: 'format': 'MMM DD, YYYY' }}