无法在日期中应用过滤器中内置的角度js

时间:2015-12-28 09:33:06

标签: javascript angularjs date angularjs-filter

我的范围变量以这种格式保存日期:

$scope.thisDay="2016-01-01 00:00:01"

{{thisDay}} --->2016-01-01 00:00:01

我在上面应用了日期过滤器,如:

{{thisDay | date:'medium'}}

但这似乎在我的案例中起作用。 有关上述的任何建议......

2 个答案:

答案 0 :(得分:1)

Date 过滤器需要日期类型数据,但您提供的是字符串而不是日期。

试试这个

$scope.thisDay=new Date("2016-01-01 00:00:01");

JSFIDDLE

如果您不想在范围内转换日期

然后创建一个过滤器,将您的字符串转换为日期对象

myApp.filter('convert2date', function() {
  return function(input) {
    return input ? new Date(input) : "";
  };
});

添加你的html

 {{thisDay | convert2date |date:'medium'}}

JSFIDDLE

答案 1 :(得分:0)

根据Date filter documentationdate参数应为:

  

格式化日期对象,毫秒(字符串或数字)的日期   或各种ISO 8601日期时间字符串格式(例如   yyyy-MM-ddTHH:mm:ss.sssZ及其较短的版本   yyyy-MM-ddTHH:mmZ,yyyy-MM-dd或yyyyMMddTHHmmssZ)。如果没有时区   在字符串输入中指定,时间被认为是在   当地时区。

因此,您需要将字符串转换为有效的javascript日期,也许创建自己的依赖于angularjs内置日期过滤器的过滤器

angular.module('app').filter('customDateFormat', function($filter) {
    return function(value) {
        if (value == null) {
            return "";
        }
        return $filter('date')(new Date(value).toISOString(), 'medium');
    };
});

然后在你的HTML中, {{ thisDay | customDateFormat}}

<强> 更新

此外,如果您想使您的过滤器更通用并将日期格式与日期一起传递,那该怎么办:

angular.module('app').filter('customDate', function($filter) {
    return function(value, format, defaultValue) {
        if (value == null) {
            if (defaultValue) {
                return defaultValue;
            } else {
                return "";
            }
        }
        return $filter('date')(new Date(value).toISOString(), format);
    };
});

然后在你的HTML中:

{{thisDay | customDateFormat:'shortTime'}}