Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 错误:[ngModel:datefmt]预期'2015-05-29T19:06:16.693209Z'为日期-角度_Javascript_Angularjs_Django_Django Rest Framework - Fatal编程技术网

Javascript 错误:[ngModel:datefmt]预期'2015-05-29T19:06:16.693209Z'为日期-角度

Javascript 错误:[ngModel:datefmt]预期'2015-05-29T19:06:16.693209Z'为日期-角度,javascript,angularjs,django,django-rest-framework,Javascript,Angularjs,Django,Django Rest Framework,我正在使用rest框架和Django开发angular应用程序 应用程序通过json从服务器接收信息。。其中一个键是created\u time。。。此字段的值的格式符合iso-8601,例如2015-05-29T19:06:16.693209Z 在客户端中,我有一个字段: <input type="time" ng-model="created_time"> 但当数据到达时,我会得到以下错误: Error: [ngModel:datefmt] Expected `2015-0

我正在使用
rest框架
Django
开发
angular
应用程序

应用程序通过json从服务器接收信息。。其中一个键是
created\u time
。。。此字段的值的格式符合
iso-8601
,例如
2015-05-29T19:06:16.693209Z

在客户端中,我有一个字段:

<input type="time" ng-model="created_time">

但当数据到达时,我会得到以下错误:

Error: [ngModel:datefmt] Expected `2015-05-29T19:06:16.693209Z` to be a date http://errors.angularjs.org/1.3.13/ngModel/datefmt?p0=2015-05-29T19%3A06%3A16.693209Z
at REGEX_STRING_REGEXP (angular.js:63)
at Array.<anonymous> (angular.js:19807)
at Object.ngModelWatch (angular.js:23289)
at Scope.$get.Scope.$digest (angular.js:14235)
at Scope.$get.Scope.$apply (angular.js:14506)
at done (angular.js:9659)
at completeRequest (angular.js:9849)
at XMLHttpRequest.requestLoaded (angular.js:9790)
错误:[ngModel:datefmt]预期'2015-05-29T19:06:16.693209Z'为日期http://errors.angularjs.org/1.3.13/ngModel/datefmt?p0=2015-05-29T19%3A06%3A16.693209Z
at REGEX_STRING_REGEXP(angular.js:63)
在阵列上。(J.js:19807)
在Object.ngModelWatch(angular.js:23289)
范围$get.Scope.$digest(angular.js:14235)
范围为$get.Scope.$apply(angular.js:14506)
完成时(angular.js:9659)
完成任务时(angular.js:9849)
在XMLHttpRequest.requestLoaded(angular.js:9790)

我已经尝试了一切:(格式与angular的文档中的说明完全相同…

这必须发生在angular 1.3+上。用于日期/时间输入的wards ng模型上的1.3+需要是有效的日期对象,不再允许日期的字符串表示形式。您需要将字符串转换为日期对象(
$scope.created\u time=new Date(dateString)
)并将其绑定到ng模型。如果您遵循此操作,它将对错误以及如何解决错误有明确的描述

所有与日期相关的输入(如)都要求模型是日期对象。如果模型是其他对象,则会引发此错误。在这种情况下,Angular不会在上设置验证错误,因为这些错误会显示给用户,但错误状态是由不正确的应用程序逻辑而不是用户造成的


如果您从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
});

如果需要使用对象更新数组中的所有日期

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);
var数据=[
{id:“1”,生日:“2016-01-20T11:24:20.882Z”},
{id:“2”,生日:“2016-01-20T11:24:20.882Z”},
{id:“3”,生日:“2016-01-20T11:24:20.882Z”},
];
函数convertDataStingToObject(数据){
对于(变量i=0;i
创建一个转换模型值的简单指令:

HTML:

<input date-input type="time" ng-model="created_time">

除了PSL的答案。 这就是如何将angular 1.3+要求重写为日期对象

它可以与AngularFire$firebaseObject一起使用,并且可以与$bindTo 3路绑定一起使用。无需扩展$firebaseObject服务。它适用于Ionic/cordova应用程序


基于

问题实际上这是日期格式问题,我使用这段代码解决了这个问题。 解决方案:下面的一段代码将解决此问题:

            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=“星期五‎, ‎二月‎ ‎1.‎, ‎2013‎ ‎06‎:‎00‎ ‎AM”,希望这将有助于其他人解决问题,我曾经遇到过这样的错误,并用它解决了问题。

我有这个错误,我直接使用了对象:我正在发布我执行的解决方案:
1:$userData.dob=新日期(userData.dob); 2:$scope.edit.userdob=userData.dob;
在1之前,我遇到了上述错误,然后我直接创建了对象并将其分配到编辑范围,问题得到了解决。

如果日期减少了1天,请使用此代码

new Date(moment.utc(value).format('l LT'))
以类似的方式,我必须创建一个指令,但要进行逐部分字符串到时间的转换。我添加了它,作为那些希望快速复制代码的人的答案

添加此指令:

并将时间设置为HTML输入标记的格式:



这对我很有帮助。谢谢:)您应该将第2行与第3行交换,以避免$scope更改和再次运行所有worker等,如:data.mydatefield=new Date(data.mydatefield)$scope.data=data;效果很好,但我不知道为什么它总是要休息一天,例如:“2017年2月2日”转换为“2017年1月2日”后,我是唯一的一个吗?如果在绑定值之前您没有$scope(或组件)访问该值,您可以在类似fiddle的指令中使用$parser和$formatters
new Date()
总是根据用户区域设置返回日期,因此不是选项。如果我在服务器上保存了08.33,我希望显示8.33,而不是用户所在的GMT偏移量。@AsafLopez因为这个月从0Fix开始!你救了我的命。new date()始终根据用户区域设置返回日期,因此不是一个选项。如果我在服务器上保存了08.33 am,我希望显示8.33 am,而不是用户建议使用的任何GMT偏移量。不再重新分配变量或对象,而是供全局使用。我必须添加“bindToController:true”但当运行时模型更改引发错误时,这就是工作
            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);
new Date(moment.utc(value).format('l LT'))
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;
      })
    }
   }
 })
<input type="time" data-ng-model="mytime" format-time>