如何让AngularJS为本地时间格式化时间戳?

时间:2014-06-18 19:10:31

标签: javascript angularjs date-formatting

我有一个双元素数组:第一个元素是一个字符串,第二个元素是epoch以来的整数个毫秒数。我可以显示整数毫秒数,但是在尝试获取日期的区域设置字符串时出现错误。

导致时间戳显示为整数的两行代码是:

<div class='timestamp' ng-bind='monologues[session][1]'></div>
<div class='timestamp' ng-bind='new Date(monologues[session][1]).toLocaleString()'></div>

Chrome错误控制台提供:

Error: [$parse:syntax] http://errors.angularjs.org/1.3.0-beta.3/$parse/syntax?p0=Date&p1=is%20an%20unexpected%20token&p2=5&p3=new%20Date(monologues%5Bsession%5D%5B1%5D).toLocaleString()&p4=Date(monologues%5Bsession%5D%5B1%5D).toLocaleString()
    at Error (native)
    at http://localhost:8000/media/js/angular.min.js:6:456
    at $a.throwError (http://localhost:8000/media/js/angular.min.js:164:422)
    at $a.parse (http://localhost:8000/media/js/angular.min.js:163:299)
    at http://localhost:8000/media/js/angular.min.js:96:31
    at k (http://localhost:8000/media/js/angular.min.js:102:163)
    at g.$watch (http://localhost:8000/media/js/angular.min.js:103:321)
    at http://localhost:8000/media/js/angular.min.js:188:247
    at H (http://localhost:8000/media/js/angular.min.js:52:492)
    at g (http://localhost:8000/media/js/angular.min.js:46:28) <div class="timestamp ng-binding" ng-bind="new Date(monologues[session][1]).toLocaleString()"> 

首先,我是否通过尝试绑定计算我想要显示的JavaScript表达式来正确处理事情?

其次,我应该如何处理服务器(按我的选择)给出整数毫秒的内容,并且我想为用户显示相应的格式化区域设置时间?

1 个答案:

答案 0 :(得分:5)

使用$ watch

您可以在控制器中进行设置:

$scope.$watch('monologues', function() {
    $scope.newProp = new Date($scope.monologues[$scope.session][1]).toLocaleString();
});

然后在您的视图中使用它:

<div class='timestamp' ng-bind='newProp'></div>

使用过滤器

你也可以为它创建一个过滤器,如下所示:

myApp.filter('toLocale', function () {
    return function (item) {
        return new Date(item).toLocaleString()
    };
});

并在视图中使用它:

<div class='timestamp'>{{ monologues[session][1] | toLocale }}</div>