我的范围变量以这种格式保存日期:
$scope.thisDay="2016-01-01 00:00:01"
{{thisDay}} --->2016-01-01 00:00:01
我在上面应用了日期过滤器,如:
{{thisDay | date:'medium'}}
但这似乎在我的案例中起作用。 有关上述的任何建议......
答案 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 documentation,date
参数应为:
格式化日期对象,毫秒(字符串或数字)的日期 或各种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'}}