我正在func componentsSeparatedByString(_ separator: String) -> [AnyObject]
申请angular
与Django
..
应用程序从服务器接收json的信息..其中一个键是rest-framework
...此字段的值是created_time
的格式,例如iso-8601
在客户端我有一个字段:
2015-05-29T19:06:16.693209Z
但是当数据到达时我得到了这个错误:
<input type="time" ng-model="created_time">
我已经尝试过所有内容:(格式与角度文档中的说明完全相同...
答案 0 :(得分:80)
这必须发生角度1.3+。对于日期/时间输入,ng-model的1.3+需要是有效的日期对象,不再允许日期的字符串表示。您需要将字符串转换为日期对象($scope.created_time = new Date(dateString)
)并将其绑定到ng-model。如果您按照the docs进行操作,则会明确说明错误以及如何解决错误。
所有与日期相关的输入都需要将模型作为Date对象。如果模型是其他内容,则会抛出此错误。在这种情况下,Angular不会设置验证错误,因为这些错误会显示给用户,但错误的状态是由错误的应用程序逻辑引起的,而不是由用户引起的。
答案 1 :(得分:34)
如果从REST服务获取数据,只需将字段转换为日期即可。
$http.get(url).success(function(data){
$scope.data = data; // get row data
$scope.data.mydatefield = new Date($scope.data.mydatefield); // convert filed to date
});
答案 2 :(得分:16)
创建一个转换模型值的简单指令:
HTML:
<input date-input type="time" ng-model="created_time">
指令:
app.directive('dateInput', function(){
return {
restrict : 'A',
scope : {
ngModel : '='
},
link: function (scope) {
if (scope.ngModel) scope.ngModel = new Date(scope.ngModel);
}
}
});
答案 3 :(得分:9)
除了PSL的回答。 这是如何将角度1.3+要求覆盖为Date对象。
<input type="date" ng-model="book.date" date-format/>
app.directive('dateFormat', function() {
return {
require: 'ngModel',
link: function(scope, element, attr, ngModelCtrl) {
//Angular 1.3 insert a formater that force to set model to date object, otherwise throw exception.
//Reset default angular formatters/parsers
ngModelCtrl.$formatters.length = 0;
ngModelCtrl.$parsers.length = 0;
}
};
});
它可以与AngularFire $ firebaseObject一起使用,并且可以与$ bindTo三向绑定一起使用。无需扩展$ firebaseObject服务。它适用于Ionic / cordova应用。
答案 4 :(得分:0)
问题实际上这是日期格式问题,我已经通过使用这段代码解决了这个问题。 解决方案:下面的代码将解决此问题:
var options = {
weekday: "long", year: "numeric", month: "short",
day: "numeric", hour: "2-digit", minute: "2-digit"
};
$scope.created_time = $scope.created_time.toLocaleTimeString("en-us", options);
其中en-us format =“2013年2月1日星期五06:00 AM”,希望这有助于其他人解决问题,我遇到了这样的错误并解决了有这个。
答案 5 :(得分:0)
我有这个错误,我直接使用了对象:我发布了我执行的解决方案:
1:$ userData.dob = new Date(userData.dob);
2:$ scope.edit.userdob = userData.dob;
在我遇到上述错误之前,我直接创建了对象并将其分配给编辑范围,问题得到了解决。
答案 6 :(得分:0)
如果日期减少1天,请使用此代码,
new Date(moment.utc(value).format('l LT'))
答案 7 :(得分:0)
以类似于 cs1707 answer 的方式,我必须创建一个指令,但要逐部分进行字符串到时间的转换。我添加了它作为那些想要快速复制代码的人的答案。
添加这个指令:
app.directive("formatTime", function(){
return {
require: 'ngModel',
link: function(scope, elem, attr, modelCtrl) {
modelCtrl.$formatters.push(function(modelValue){
var string=modelValue;
var date=new Date();
var time=string.split(':');
date.setHours(+time[0]);
date.setMinutes(time[1]);
date.setSeconds(time[2]);
return date;
})
}
}
})
和 format-time
到您的 HTML input 标签:
<input type="time" data-ng-model="mytime" format-time>
答案 8 :(得分:-2)
如果您需要更新Array with Objects
中的所有日期var data = [
{ id: "1" , birthday: "2016-01-20T11:24:20.882Z"},
{ id: "2" , birthday: "2016-01-20T11:24:20.882Z"},
{ id: "3" , birthday: "2016-01-20T11:24:20.882Z"},
];
function convertDataStingToObject (data) {
for(var i=0; i < data.length; i++ ){
console.log('string: ' + data[i].birthday);
data[i].birthday = new Date(data[i].birthday);
console.log('updated: ' + data[i].birthday);
console.log(typeof(data[i].birthday));
}
return data;
}
convertDataStingToObject(data);