为什么我的dateFormat不起作用?

时间:2015-02-27 21:12:12

标签: angularjs angularjs-directive datefilter

我在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

这是一个显示问题的plunker:

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

任何想法为什么它不起作用?

2 个答案:

答案 0 :(得分:2)

我使用了

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

(也就是说,我对格式化程序知之甚少,不知道这是否是一个正确的解决方案,或者你是否应该以不同的方式做其他事情。)

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

答案 1 :(得分:1)

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

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

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