使用 Angular JS 过滤器转换日期失败

Converting date using Angular JS filter fails

我正在使用 angular js 过滤器在控制器上格式化日期。用户从 uib-datepicker-popup 中选择一个日期。这是我想要使用 ISO 8601 (yyyy-mm-dd) 日期格式格式化的日期。然后我记录用户选择的日期并得到类似这样的东西

Sat Aug 20 2016 00:00:00 GMT+0300 (EAT)

但是我会像这样使用 angular $filter

$filter('date')(new Date(vm.my_date), 'yyyy-mm-dd');

最后的日期是

2016-00-20

这是我控制器上的代码

        // Logs Sat Aug 20 2016 00:00:00 GMT+0300 (EAT)
        console.log(vm.my_date);

        var converted = $filter('date')(new Date(vm.my_date), 'yyyy-mm-dd');

        // Logs 2016-00-20
        console.log(converted);

我做错了什么?

你为什么不使用 ui.bootstrap.dateparser?当 ui.bootstrap.datepicker 中已经内置了一个自定义过滤器时,无需创建自定义过滤器。 Angular Directives for Bootstrap

过滤器应该像 'yyyy-MM-dd' 查看此文档 angular filter

当您在过滤器中写入 mm 时,过滤器认为您的意思是 minutes
为了让过滤器理解 ms 需要大写,所以它理解你的意思是 month.
更改过滤器来自:

var converted = $filter('date')(new Date(vm.my_date), 'yyyy-mm-dd');

var converted = $filter('date')(new Date(vm.my_date), 'yyyy-MM-dd');

会解决您的问题。