date.Parse()的问题

时间:2016-10-20 05:04:01

标签: javascript html angularjs

我输入了无效数据,例如“09/31/2016 10:10 AM”

但实际上我们在2016年9月没有任何第31个,什么date.parse()正在计算下一个日期“2016年10月1日@ 10:10 AM”作为输出。

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>

我做错了吗?

2 个答案:

答案 0 :(得分:2)

你没有做错任何事,但如果要检查翻转,你必须编写自己的日期验证器:

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);
}

您可以看到这段代码被广泛借用的帖子:Is this a good way to check for a valid date in JavaScript?

答案 1 :(得分:1)

用于验证日期,月份或年份或这些的任何组合。您可以使用适合日期时间操作的moment.js库。

使用时刻库​​的isValid()

请参阅http://momentjs.com/docs/