当您将type=time 用于输入时,该值将存储为仅表示时间的字符串,例如“1:00”或“13:00”。 amDateFormat 过滤器需要一个可以解释为日期的值,该日期可以是 Date 对象、时间戳的数字值或格式正确的字符串日期。您将使用type=time 获得的时间值不是有效的日期字符串,因此amDateFormat 无法正确解析该值。
使其工作的最简单方法是在使用 amDateFormat 过滤器之前连接 event.date 和 event.time 的值:
<div class="row">
{{event.date + ' ' + event.time | amDateFormat: 'h:mm a'}}
</div>
更好的解决方案是使用一个函数,您可以在其中传入日期和时间,或者只是时间,然后构造一个可以被解释为日期或日期对象的东西。 p>
<div class="row">
{{ combine(event.date,event.time) | amDateFormat: 'h:mm a'}}
</div>
简单的合并函数
$scope.combine = function(date,time) {
if (date && time) {
return date + ' ' + time;
} else {
return "";
}
};
我仍然认为必须像这样在时间上添加日期有点笨拙,但它确实有效,而且您甚至可能最终在您的数据模型中将它们连接在一起。我认为最好的解决方案是只拥有一个 event.dateAndTime 对象,您可以使用它来表示日期和时间both - 您可以使用type=datetime-local html5 类型(至少在 Chrome 中它对我有用)。
<dir>Date and time: <input type="datetime-local" ng-model="event.datetime"></dir>
<h4>{{event.datetime | amDateFormat:'MMMM Do'}}</h4>
<div class="row">
event.datetime time: {{ event.datetime | amDateFormat: 'h:mm a'}}
</div>
这是一个正常工作的插件:http://plnkr.co/edit/OERKK9ilxFwUlKLKirtl?p=preview