Tengo cierta lógica que simplifiqué en este JSFiddle: http://jsfiddle.net/r7vyjg4h/ y eso funciona .

Html:

<div ng-controller="MyCtrl">
<div ng-repeat="line in lines">
    <div style="display: inline-block">
      {{line.id}}
    </div>
    <div style="display: inline-block">
      <input type="text" ng-model="line.date" />
    </div>
  </div>
  <input type="button" ng-click="update()" value="update" />
</div>

Js:

function MyCtrl($scope) {
    $scope.lines = [{
        id:"1",
        date: new Date()
      },{
        id:"2",
        date: new Date()
      },{
        id:"3",
        date: new Date()
      }
      ];
      var newDates = [{id:"1", date: new Date('10-10-2010 10:10:10')}, {id:"3", date: new Date('11-11-2011 11:11:11')}];

      $scope.update = function(){
        for(var i = 0; i < newDates.length;i++){
            for(var j = 0; j < $scope.lines.length; j++){
              if($scope.lines[j].id == newDates[i].id){
                  $scope.lines[j].date = newDates[i].date;
              }
            }
          }
      }

Lo que hace selecciona algunas fechas de una solicitud web y se supone que debe agregarlo a los cuadros correctos en una repetición ng. Hasta ahora todavía funciona correctamente.

Pero cuando cambio el tipo de entrada de texto a fecha , no sucede nada. Los valores que selecciono son correctos pero los elementos de fecha no se actualizan.

http://jsfiddle.net/vd347sfa/

Que me estoy perdiendo aqui? Estoy haciendo algo mal ?

0
Magic-Mouse 11 may. 2016 a las 13:38

3 respuestas

La mejor respuesta

La especificación de entrada de fecha HTML-5 se basa en RFC3339 sección 5.6 que especifica un formato de fecha igual a yyyy-MM-dd. (Nota: ese es exactamente el mensaje de error en la consola cuando ejecuta su jsfiddle). Solo tiene que proporcionar la cadena de fecha en el formato correcto: http://jsfiddle.net/yxkvm0zm/1/

1
user1924627 11 may. 2016 a las 11:04

La razón por la que no se refleja en el campo de entrada de fecha es porque el formato.

El campo de entrada de fecha busca el formato mm/dd/yyyy y usted proporciona 10-10-2010 10:10:10 en este formato.

Puede usar la función para convertir la fecha al formato toISOString() y debería ser el truco.

Ahí va, compruebe esta solución:

 var newDates = [{id:"1", date: new Date('10-10-2010 10:00:00').toISOString().substring(0, 10)},{id:"2", date: new Date('10-10-2010 11:00:00').toISOString().substring(0, 10)}, {id:"3", date: new Date('11-11-2011 12:00:00').toISOString().substring(0, 10)}];

http://jsfiddle.net/vd347sfa/3/

0
Murlidhar Fichadia 11 may. 2016 a las 10:56

Debe indicar la fecha y la hora en el formato adecuado. La forma correcta de hacer esto es:

var newDates = [{id:"1", date: new Date('2010', '10', '10', '10', '10', '10')}, 
{id:"3", date: new Date('2011', '11', '11', '11','11','11')}];

El formato es:

new Date('yyyy', 'mm', 'dd', 'hh', 'mm', 'ss');
0
Avantika Saini 11 may. 2016 a las 11:18