2016-09-29 64 views
0

如何将上述所有日期转换为YYYY-MM-DD格式?我用这种方式,但它不工作。转换日期格式的对象包含日期angulajs

$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); 
      }); 
+0

因为它们不是日期对象,所以你需要在你的数据源中有日期 –

+0

你怎么能把'key','vaule'对放在数组'dateDatas'中? –

+0

@ Angular_10不,他们不必在源...但他们确实需要解析日期以使用过滤器 – charlietfl

回答

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. 在第一行中,不应该有数组中的所有对,删除'键,并保留该值:

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

  2. 作为一个方面说明,还请记住在数组后面加分号。

  3. $filter('date')将工作日期,而不是字符串。您首先需要将您的初始字符串转换为日期对象。我得到了将该字符串转换为来自here的日期的代码。另外请注意,您需要通过1它传递给Date构造,因为在Date构造月份是基于0出于某种原因之前减少月份值(一月,1预计0月等):

    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"]

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