Невозможно сравнить дату, используя Angular.js

0

Мне нужна помощь. Мне нужно сравнить сегодняшнюю дату с будущей датой, используя 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 ответов

2
Лучший ответ

Вам нужно манипулировать строкой для создания даты.

Попробуй это

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

Он дает вам предупреждение, когда пользователь выбирает будущую дату, которая больше, чем сегодня. Если вы хотите, чтобы пользователь выбирал последнюю дату, используйте условие > in if.

  • 0
    @subhra, пока это работает, вы все равно должны написать функцию разбора для этого формата даты, если она вам нужна и в других местах.
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);
  };

Ссылка: qaru.site/questions/47962/...

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.

  • 0
    @ VVK: $scope.date , я получаю дату из календаря.
  • 0
    и я также получаю как этот формат dd-mm-yyyy .
Показать ещё 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');

    }
}
0

Решение 1

Когда вы сравниваете даты как строки, сравнение берет по одному символу за раз, а потому, что в вашем примере 3 больше 1 (даже если 30-11-2015 меньше, чем 1-12-2015), результат больше для ноябрьской даты. Если вы хотите придерживаться строковых представлений дат, измените формат даты на 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 переменную $scope.date в формате Date по переменной $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');
    }
}
  • 0
    @ iulian: Но мой формат даты вставки - dd--mm-yyyy Будет ли хорошо? Я предпочту решение 1.
  • 0
    какой модуль datepicker вы используете? если вы используете указатель даты из angular-ui-bootstrap, вы можете указать формат даты, в котором вы бы хотели, чтобы дата была. Хотя я думаю, что фактическим значением является объект Date , не так ли?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню