簡體   English   中英

無法使用Angular.js比較日期

[英]Can not compare date using Angular.js

我需要一個幫助。我需要使用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-201530-11-2015 with 1-12-2015日進行比較,它沒有顯示任何警報消息。請幫助我。

您需要操縱字符串來創建日期。

嘗試這個

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

當用戶選擇的將來日期大於今天時,它會給您警報。 如果要在用戶選擇過去日期時發出警報,則在條件中使用>

嘗試這個

$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日期。

解決方案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.date = new Date($scope.date)$scope.date變量轉換為Date格式,並將其與new Date()進行比較。 由於不需要getFutureDate方法,因此此方法可以減少代碼getFutureDate

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

似乎您想從自定義格式( dd-mm-yyyy )解析Date。
我建議使用專用的函數來解析該日期格式,特別是如果您需要解析這種日期格式的情況不止這種情況:

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

    }
}

您可以使用正則表達式執行相同的操作。

使用正則表達式將字符串轉換為日期,然后使用< 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM