2016-10-20 7 views
0

ich ungültige Daten wie „2016.09.31 10.10“ eingebenAusgabe mit Date.parse()

aber eigentlich nicht, wir in September 2016 jede 31. haben, was Date.parse() ist Dabei berechnet es das nächste Datum "01.10.2016 @ 10:10" als Ausgabe.

angular.module("myModule", []) 
 
     .controller("myController", ['$scope', function ($scope) { 
 
        
 
      $scope.dDate = "09/31/2016 10:10 AM"; 
 
        
 
      $scope.format = function() { 
 
       $scope.display = Date.parse($scope.dDate); 
 
      } 
 
      $scope.format(); // invoke the format() 
 
     }]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<body ng-app="myModule" > 
 
    <div ng-controller="myController" ng-form="frm"> 
 
     <input type="text" name="name" style="width:250px;" ng-model="dDate" ng-change="format()" placeholder="MM/dd/YYYY hh:mm AM/PM" ng-pattern="/^(0[1-9]|1[012])[/]([123]0|[012][1-9]|31)[/](19[0-9]{2}|2[0-9]{3}) ([01][0-9]|2[0-3]):([0-5][0-9]) (AM|PM|am|pm)$/" /> 
 
     <div ng-show="!frm.name.$error.pattern"> 
 
      {{display | date : 'MMM dd, yyyy @ hh:mm a'}} 
 
     </div> 
 
     <div>Error : {{frm.name.$error}}</div> 
 
    </div> 
 
</body>

habe ich etwas falsch gemacht?

Antwort

2

Sie haben nichts falsch gemacht, aber Sie haben Ihr eigenes Datum Validator zu schreiben, wenn Sie für Roll überprüfen möchten:

function checkDate(str) { 
    var matches = str.match(/(\d{1,2})[- \/](\d{1,2})[- \/](\d{4})/); 
    if (!matches) return; 

    // parse each piece and see if it makes a valid date object 
    var month = parseInt(matches[1], 10); 
    var day = parseInt(matches[2], 10); 
    var year = parseInt(matches[3], 10); 
    var date = new Date(year, month - 1, day); 
    if (!date || !date.getTime()) return; 

    // make sure we have no funny rollovers that the date object sometimes accepts 
    // month > 12, day > what's allowed for the month 
    if (date.getMonth() + 1 != month || 
     date.getFullYear() != year || 
     date.getDate() != day) { 
      return; 
     } 
    return(date); 
} 

Sie diesen Beitrag sehen können, aus dem der Code zügig ausgeliehen wurde: Is this a good way to check for a valid date in JavaScript?

1

Für die Validierung von Datum, Monat oder Jahr oder einer der Kombinationen von diesen. Sie können die moment.js-Bibliothek verwenden, die sich perfekt für die Manipulation von Datumszeiten eignet.

Verwenden isValid() Momenten Bibliothek

Bitte beachten http://momentjs.com/docs/

+0

'Moment ("2016.09.31 10.10"). IsValid()' ist 'true'. – Amadan

+0

@Amadan das ist, weil Moment dieses Format nicht auf eigene Faust unterbindet. check 'moment ('31.09.2016 ',' MM/TT/JJJJ '). isValid()' is 'false' – tanmay

+1

Zitieren [momentjs docs] (http://momentjs.com/docs/#/parsing) "Für konsistente Ergebnisse, die andere als [ISO 8601] (https://xkcd.com/1179/) Strings analysieren, sollten Sie String + Format verwenden." – tanmay