日期格式在angularjs中不起作用

时间:2017-07-11 11:46:19

标签: javascript angularjs date

我从服务器获取以下格式的日期。

" 2017-07-10T20:51:13.000Z&#34 ;.

但是当我要更改" dd / MM / yyyy"中的日期格式时格式它会自动添加一天。

请检查这个plunkr。

Plunkr



var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope) {
  $scope.date = '2017-07-10T20:51:13.000Z';
});

<!DOCTYPE html>
<html ng-app="plunker">

  <head>
    <meta charset="utf-8" />
    <title>AngularJS Plunker</title>
    <script>document.write('<base href="' + document.location + '" />');</script>
    <link rel="stylesheet" href="style.css" />
    <script data-require="angular.js@1.2.x" src="http://code.angularjs.org/1.2.14/angular.js" data-semver="1.2.14"></script>
    <script src="app.js"></script>
  </head>

  <body ng-controller="MainCtrl">
    <p ng-bind="date | date:'MM/dd/yyyy'"></p>
  </body>

</html>
&#13;
&#13;
&#13;

我的实际日期是 7月10日但我的结果是 7月11日 请帮助我如何解决这个问题。

2 个答案:

答案 0 :(得分:2)

//add custom filter
.filter('datetime', function($filter){
    return function(input){
      if(input == null){ return ""; } 

      var _date = $filter('date')(new Date(input),'MM/dd/yyyy');         
      return _date.toUpperCase();
   };
});

//html
{{ $scope.date | datetime }}

答案 1 :(得分:1)

我相信我们正在努力解决同样的问题。问题是时区。您指定的日期是UTC(请注意Z)  但默认情况下,角度文件管理器使用浏览器的时区。你有几个选择。第一个是hack但可能有效,并强制浏览器以UTC格式呈现:

{{ $scope.date | datetime | 'UTC'}}

这将用于呈现日期(无时间部分),假设日期始终为UTC。请注意,您始终使用UTC。

更大的解决方案(我们正在开展工作的解决方案)是更具体地说明所需的日期时间对象。我们现在使用从db一直到前端的特定日期值。这消除了时区的概念。这意味着我们不再在后端或前端使用标准日期对象(即AngularJS)。因此,您需要创建自定义过滤器以及自定义输入才能正确执行此操作。