2015-11-02 5 views
9

Wenn Sie die md-datepicker-Anweisung in eckigem Material verwenden, scheint das Datumsformat nicht für die direkte Eingabe zu funktionieren.md-datepicker Eingabeformat

Wenn ich ein Datum im Kalender auswähle, wird es wie angegeben angezeigt (in meinem Fall DD-MM-JJJJ), aber wenn ich versuche, die Eingabe manuell zu ändern, wird meine Eingabe als MM-TT-JJJJ analysiert.

Bisher meine Datepicker aus this question diesen Code eingestellt mit

angular.module('MyApp').config(function($mdDateLocaleProvider) { 
    $mdDateLocaleProvider.formatDate = function(date) { 
    return date ? moment(date).format('DD-MM-YYYY') : ''; 
    }; 
}); 

Here ist ein codepen das Problem in Aktion zu sehen.

Gibt es eine Möglichkeit, das Eingabeformat einzurichten?

Antwort

17

Format Datum Ereignis ist nicht genug. Sie sollten auch das Parsedate-Ereignis konfigurieren.

$mdDateLocaleProvider.parseDate = function(dateString) { 
    var m = moment(dateString, 'DD-MM-YYYY', true); 
    return m.isValid() ? m.toDate() : new Date(NaN); 
}; 

Siehe aktualisiert Stift: http://codepen.io/anon/pen/GpBpwZ?editors=101

5

Die Komplettlösung Basis es ist:

$mdDateLocaleProvider.formatDate = function(date) { 
return date ? moment(date).format('DD-MM-YYYY') : ''; 
}; 

$mdDateLocaleProvider.parseDate = function(dateString) { 
var m = moment(dateString, 'DD-MM-YYYY', true); 
return m.isValid() ? m.toDate() : new Date(NaN); 
}; 
0
config($mdDateLocaleProvider) { 
    $mdDateLocaleProvider.formatDate = function(date) {  
     if(date !== null) { 
     if(date.getMonthName == undefined) { 
      date.getMonthName = function() { 
      var monthNames = [ "January", "February", "March", "April", "May", "June", 
      "July", "August", "September", "October", "November", "December" ]; 
      return monthNames[this.getMonth()]; 
      } 
     }   
     var day = date.getDate(); 
     var monthIndex = date.getMonth(); 
     var year = date.getFullYear(); 
     return day + ' ' + date.getMonthName() + ' ' + year; 
     } 
    }; 
    }