Usando el filtro de fecha AngularJS con fecha UTC

Resuelto Francisc asked hace 11 años • 10 respuestas

Tengo una fecha UTC en milisegundos que paso al filtro de fecha de Angular para formato humano.

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

Impresionante, excepto someDateque está en UTC y el filtro de fecha considera que está en hora local.

¿ Cómo puedo saber si Angular someDatees UTC?

Gracias.

Francisc avatar Dec 18 '13 22:12 Francisc
Aceptado

Parece que la gente de AngularJS está trabajando en ello en la versión 1.3.0. Todo lo que necesitas hacer es agregar : 'UTC'después de la cadena de formato. Algo como:

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

Como puedes ver en los documentos , también puedes jugar con él aquí: Ejemplo de Plunker

Por cierto, creo que hay un error con el parámetro Z, ya que todavía muestra la zona horaria local incluso con 'UTC'.

nir avatar Sep 21 '2014 19:09 nir

Pregunta similar aquí

Volveré a publicar mi respuesta y propondré una fusión:

La salida UTC parece ser objeto de cierta confusión: la gente parece gravitar hacia moment.js .

Tomando prestado de esta respuesta , podría hacer algo como esto (es decir, usar una función de conversión que crea la fecha con el constructor UTC) sin moment.js:

controlador

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;

  }]);

plantilla

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

Aquí tienes Plunker para jugar con él.

Vea también esto y esto .

También tenga en cuenta que con este método, si usa la 'Z' del filtro de fecha de Angular, parece que aún imprimirá el desplazamiento de su zona horaria local.

ossek avatar Feb 14 '2014 17:02 ossek

Aquí hay un filtro que tomará una cadena de fecha O un objeto JavaScript Date(). Utiliza Moment.js y puede aplicar cualquier función de transformación de Moment.js , como la 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);
  };
});

Entonces...

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

se mostraría el 11 de noviembre de 2014

{{ anyDateObjectOrString | moment: 'fromNow' }}

mostraría hace 10 minutos

Si necesita llamar a varias funciones de momento, puede encadenarlas. Esto se convierte a UTC y luego se formatea...

{{ someDate | moment: 'utc' | moment: 'format': 'MMM DD, YYYY' }}
Charlie Martin avatar Nov 12 '2014 23:11 Charlie Martin