从包含AngularJS中的日期的对象转换日期格式

时间:2016-09-29 13:57:15

标签: angularjs

如何将所有日期转换为YYYY-MM-DD格式?我已经用过这种方式,但它没有用。

$scope.dateDatas = [0:"29-09-2016", 1:"30-09-2016",2:"01-10-2016",3:"02-10-2016",4:"03-10-2016"]

angular.forEach ($scope.dateDatas, 
            function (value) {
            var d = $filter('date')(value, 'yyyy-mm-dd');
            console.log(d);
          });

1 个答案:

答案 0 :(得分:1)

这个怎么样:

$scope.dateDatas = ["29-09-2016", "30-09-2016", "01-10-2016", "02-10-2016", "03-10-2016"];
$scope.result = [];

angular.forEach ($scope.dateDatas, function (value) {
    var splitValue = value.split("-");
    var date = new Date(splitValue[2], splitValue[1] - 1, splitValue[0]);

    var res = $filter('date')(date, 'yyyy-MM-dd');
    $scope.result.push(res);
    console.log(res);
});

以下是问题:

  1. 在第一行,数组中不应有任何对,删除'key',并保留值:

    $scope.dateDatas = ["29-09-2016", "30-09-2016", "01-10-2016", "02-10-2016", "03-10-2016"];

  2. 作为旁注,请记住在数组后加分号。

  3. $filter('date')适用于日期,而不是字符串。首先需要将初始字符串转换为日期对象。我得到了将此字符串从here转换为日期的代码。另请注意,在将月份值传递给Date构造函数之前,需要将月值减1,因为Date构造函数中的月份由于某种原因从0开始(期望0表示1月,1表示2月等):

    var splitValue = value.split("-");
    var date = new Date(splitValue[2], splitValue[1] - 1, splitValue[0]);

  4. 过滤器参数应该是'yyyy-MM-dd'而不是'yyyy-mm-dd'(大写字母M),因为小的m代表分钟而不是几个月,并且会给你这个结果:

    ["2016-00-29", "2016-00-30", "2016-00-01", "2016-00-02", "2016-00-03"]

  5. 另请查看plunker上的完整示例。