2016-09-29 88 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上的完整示例。