无法使用Angular.js比较日期

时间:2015-11-30 10:18:49

标签: javascript angularjs

我需要一个帮助。我需要使用Angular.js将今天的日期与将来的日期进行比较。我在下面解释我的代码。

$scope.getFutureDate = function() {
    var today = new Date();
    var dd = today.getDate();
    var mm = today.getMonth() + 1; //January is 0!

    var yyyy = today.getFullYear();
    if (dd < 10) {
        dd = '0' + dd
    }
    if (mm < 10) {
        mm = '0' + mm
    }
    var today = dd + '-' + mm + '-' + yyyy;
    return today;
}

$scope.addPlanData = function() {
    var today = $scope.getFutureDate();
    if (today < $scope.date) {
        alert('Please select todays date or previous date');

    }
}

这里我的要求是,今天的日期会比未来的日期少,它会向我显示警告信息。在此代码中,它仅在一个月内发生。但如果我将与此类30-11-2015 with 1-12-2015进行比较,则不会显示任何警报信息。请帮助我。

5 个答案:

答案 0 :(得分:1)

您需要操纵字符串来创建日期。

试试这个

$scope.addPlanData=function(){
 var today= new Date();
 if(today < new Date($scope.date.split("-").reverse().join(",")){
            alert("Please select today's date or previous date");
        }
}

当用户选择比今天更大的未来日期时,它会提醒您。如果您在用户选择过去日期时需要提醒,请在if条件中使用>

答案 1 :(得分:0)

试试这个

$scope.addPlanData=function(){
 var today= new Date();

 var dateArray = $scope.date.split("-");
 $scope.date = new Date(dateArray[2], dateArray[1] - 1, dateArray[0]);

 if(today < $scope.date){
            alert('Please select today or previous date');
        }
}

关系运算符< <= > >=可用于比较JavaScript日期。

答案 2 :(得分:0)

解决方案1 ​​

当您将日期比较为字符串时,比较一次只需要一个字符,因为在您的示例中3大于1(即使30-11-2015的日期小于1-12-2015),结果在11月日期更大。如果您想坚持使用日期的字符串表示形式,请将日期格式更改为YYYY-MM-DD,以便您首先比较年份,然后是月份,然后是日期。在这种情况下,您的2015-12-01大于2015-11-30,因为比较将从当月的单位数位2处停止。

$scope.getFutureDate = function () {
    var today = new Date();
    var dd = today.getDate();
    var mm = today.getMonth() + 1; //January is 0!

    var yyyy = today.getFullYear();
    if ( dd < 10 ) {
        dd = '0' + dd;
    } 
    if ( mm < 10 ) {
        mm = '0' + mm;
    } 
    return yyyy + '-' + mm + '-' + dd;
}

$scope.addPlanData = function () {
    var today = $scope.getFutureDate();
    if ( today < $scope.date ) {
        alert('Please select todays date or previous date');
    }
}

解决方案2

您可以直接比较日期。在此护理中,您需要按$scope.dateDate变量转换为$scope.date = new Date($scope.date)格式,并将其与new Date()进行比较。此方法为您提供的代码更少,因为您不需要getFutureDate方法。

$scope.addPlanData = function () {
    if ( new Date() < new Date($scope.date) ) {
        alert('Please select todays date or previous date');
    }
}

答案 3 :(得分:0)

您似乎想要从自定义格式(dd-mm-yyyy)解析日期 我建议使用专用函数来解析该日期格式,特别是如果你需要在这种情况下解析那种日期格式:

function parseDate(dateString) {
    var date = new Date();
    // reset time to 0:00:00
    date.setUTCHours(0);
    date.setUTCMinutes(0);
    date.setUTCSeconds(0);

    var parts = dateString.split("-");
    date.setUTCDate(parts[0]);
    date.setUTCMonth(parts[1]);
    date.setUTCFullYear(parts[2]);

    return date;
}

并像这样使用它:

$scope.addPlanData = function() {
    var today = new Date();
    if (today < parseDate($scope.date)) { // parse custom date format here
        alert('Please select todays date or previous date');

    }
}

答案 4 :(得分:0)

您可以使用正则表达式来执行相同的操作。

使用正则表达式将字符串转换为日期,然后使用< or > or <= or >=进行比较。

$scope.compare = function() {
   var date1 = "30-11-2015";
   var date2 = "1-12-2015";
   var d1 = new Date( date1.replace( /(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3") );
   var d2 = new Date( date2.replace( /(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3") );
   alert(d1 < d2);
  };

参考:Stackoverflow