为什么我的日期格式不起作用?

Why isn't my dateFormat working?

我在 AngularJS 1.3.10 中有以下代码:

ngModelCtrl.$formatters.unshift(function (modelValue) {
    console.log(modelValue)
    var temp = dateFilter(modelValue, 'yyyy-MM-dd');
    console.log(temp);
    return temp;
});

返回的结果仍然是

的完整日期格式
Fri Feb 27 2015 14:05:20 GMT-0700 (Mountain Standard Time)

而不是

2014-02-27

这是一个显示问题的插件:

http://plnkr.co/edit/pOKtD5hScXsPMHFAeglC?p=preview

知道为什么它不起作用吗?

我使用它

var temp = dateFilter(new Date(modelValue), 'yyyy-MM-dd');

(也就是说,我对格式化程序的了解还不够,不知道这是否是一个合适的解决方案,或者您是否应该做其他不同的事情。)

您看到此行为的原因是因为有一个默认格式化程序将其参数转换为字符串,并且 Angular 以 逆序 执行格式化程序。因为你在前面插入了你的格式化程序,默认的格式化程序在你看到它之前就已经把模型值转换成了一个字符串。因此,您也可以将 unshift 更改为 push,或者将整个 $formatters 数组替换为仅包含您的函数的数组,这两者的工作原理是等效的。我不完全确定这样做会有什么副作用。

您需要将模型值包装在 Date Object 中。因为为了使用 angular 日期过滤器,您需要传递一个 Date Javascript 对象。

dateFilter(new Date(modelValue), 'yyyy-MM-dd');

这是你的http://plnkr.co/edit/Jdms8NOtdMQ83KLb1X0D工作