Я использую фильтр даты для рендеринга отметки времени unix в определенном формате. Я заметил, что фильтр добавляет локальный часовой пояс к выходу.
Можно ли просто вывести точную метку времени без добавления информации о часовом поясе?
Input:
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?
Ответ 1
"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, чтобы играть с ним
См. также this и .
Также обратите внимание, что с помощью этого метода, если вы используете фильтр даты "Z" из Angular, кажется, он все равно напечатает ваше местное смещение часового пояса.
Ответ 2
Так как версия 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' }}
Здесь вы можете найти документацию по фильтрам даты AngularJS.
ПРИМЕЧАНИЕ: работает только с Angular 1.x
Здесь рабочий пример
Ответ 3
Фильтр даты всегда форматирует даты, используя локальный часовой пояс. Вам нужно будет написать свой собственный фильтр на основе методов getUTCXxx()
Date
или в библиотеке, например moment.js.
Ответ 4
Я просто использовал функцию getLocaleString() для своего приложения. Он должен адаптировать формат времени, общий для локали, поэтому нет +0200 и т.д. Конечно, будет меньше возможностей для управления шириной вашей строки.
var str = (new Date(1400167800)).toLocaleString();