2014-02-14 78 views
29

我使用日期筛选器以某种格式呈现unix时间戳。我注意到过滤器将本地时区添加到输出。Angular:日期过滤器添加时区,如何输出UTC?

有什么方法可以简单地输出确切的时间戳,而不需要添加任何时区信息?

输入:

talk.content.date_and_time = 1400167800 

(是05年/ 15/14 @下午3点30分00秒UTC)

代码:

{{talk.content.date_and_time*1000 | date:'dd-M-yyyy H:mm Z'}} 

输出:

15-5-2014 17:30 +0200 

我怎样才能使产出15:30而不是17:30?

+0

什么是你的代码?什么是输入,输出是什么?什么是期望的输出? –

+0

对不起,我很着急。添加到问题@JBNizet。 – Squrler

+0

如果您传递一个毫秒的原始整数数,则Date过滤器将根据当地时间仍然解释它。但是使用UTC构造函数和传递日期或先发制人的过滤器的时区的偏移量加上自己米利斯并通过它似乎工作所抵消。 – ossek

回答

23

'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="[email protected]*" 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发挥它

另请参阅thisthis

另外请注意,使用此方法,如果您使用Angular的日期过滤器中的'Z',它似乎仍会打印您当地的时区偏移量。

+2

而不是控制器中的函数正如其他人所建议的那样,可以将'millisToUTCDate'结合到一个过滤器中。 – ossek

+0

你也可以将这两个函数合并为一个。 'VAR millisToUTCDate =函数(米利斯){ 变种日期新日期(米利斯); (date.getUTCFullYear(),date.getUTCMonth(),date.getUTCDate(),date.getUTCHours(),date.getUTCMinutes(),date.getUTCSeconds()); };' 这对我有帮助的COS'我无法让过滤器工作:/。谢谢。 – Gondil

0

日期筛选器始终使用本地时区格式化日期。您必须根据DategetUTCXxx()方法或像moment.js这样的库来编写自己的过滤器。

71

由于版本1.3.0 AngularJS引入额外的过滤参数timezone,像以下:

{{ date_expression | date : format : timezone}} 

但在版本1.3.x唯一支持的时区是UTC,可以使用如下:

{{ someDate | date: 'MMM d, y H:mm:ss' : 'UTC' }} 

由于版本AngularJS也支持其他时区。我没有测试所有可能的时区,但这里的,例如,你如何能在日本标准时间(JSP,GMT +9)获取日期:

{{ clock | date: 'MMM d, y H:mm:ss' : '+0900' }} 

Here你可以找到AngularJS日期筛选的文档。

注:这是与角1.x中唯一的工作

这里的​​3210

+2

是的,就是这样。正确的那一个。 – user1576978

+1

不幸的是,这个额外的时区参数在[Angular 2的日期管道](https://angular.io/docs/ts/latest/api/common/index/DatePipe-class.html)中不受支持。做类似于第一个答案中的建议仍然可以在Angular 2中运行。 – munsellj

+0

这些示例都不起作用。 – user3640967

0

我只是用getLocaleString我的应用程序()函数。它应适应区域共同的TIMEFORMAT,所以没有+0200等Ofcourse,将有控制您的字符串的宽度,则可能性较小。

var str = (new Date(1400167800)).toLocaleString(); 
相关问题