Usando el filtro de fecha AngularJS con fecha UTC
Tengo una fecha UTC en milisegundos que paso al filtro de fecha de Angular para formato humano.
{{someDate | date:'d MMMM yyyy'}}
Impresionante, excepto someDate
que está en UTC y el filtro de fecha considera que está en hora local.
¿ Cómo puedo saber si Angular someDate
es UTC?
Gracias.
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'.
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.
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' }}