无法应用日期过滤器内置的angular js

Not able to apply angular js built in filter for date

本文关键字:angular js 内置 过滤器 应用 日期      更新时间:2023-09-26

我的范围变量保存的日期格式如下:

$scope.thisDay="2016-01-01 00:00:01"
{{thisDay}} --->2016-01-01 00:00:01

我为上面的应用了一个日期过滤器,比如:

{{thisDay | date:'medium'}}

但这对我来说似乎不起作用。关于以上的任何建议。。。

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

根据日期过滤器文档,date参数应为:

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

因此,您需要将字符串转换为有效的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'}}