Javascript Дата Окончания Срока Действия Проверить Статус

У меня есть этот код:

    $(document).ready(function() {
        $('input[name=x_contract]:radio').click(function(){
            var date = new Date($("#x_installeddate").val());
            if($(this).attr("value")=="Yearly"){
                var lastDay = new Date(date.getFullYear(), date.getMonth() + 12, date.getDate());            
            } else if ($(this).attr("value") == "2 Years") {
                var lastDay = new Date(date.getFullYear(), date.getMonth() + 24, date.getDate()); 
            } else if ($(this).attr("value") == "3 Years") {
                var lastDay = new Date(date.getFullYear(), date.getMonth() + 36, date.getDate()); 
        }
        lastMonth = ( (lastDay.getMonth() + 1) < 10) ? '0' + (lastDay.getMonth() + 1) : (lastDay.getMonth() + 1);
        lastDate = ( lastDay.getDate() < 10 ) ? '0' + lastDay.getDate() : lastDay.getDate();
        var newDate =  lastDay.getFullYear() + '/' + lastMonth + '/' + lastDate;
        if (isNaN(lastMonth) == false) $("#x_expirationdate").val(newDate);
    });
});

Эта функция генерирует срок годности ежегодно, через 2 года и через 3 года. После того, как эта функция генерирует дату истечения срока действия, я хочу иметь обновление статуса, когда он истек или нет. Это зависит от текущей даты. Если дата истекла, я хочу, чтобы другой столбец имел статус 1 и 0, если нет.

Как я могу решить это в JavaScript :)?

Спасибо!

2 ответа

  1. В следующем коде метка времени сравнивается между сегодняшней датой и вычисленной последней датой, чтобы узнать, истекла ли последняя дата или все еще действительна.

    Надеюсь, это поможет.

    $(document).ready(function() {
        $('input[name=x_contract]:radio').click(function(){
            var date = new Date($("#x_installeddate").val());
            var today = new Date(), todayTimeStamp = 0, lastDayTimeStamp = 0;
    
            if($(this).attr("value")=="Yearly"){
                var lastDay = new Date(date.getFullYear(), date.getMonth() + 12, date.getDate());            
            } else if ($(this).attr("value") == "2 Years") {
                var lastDay = new Date(date.getFullYear(), date.getMonth() + 24, date.getDate()); 
            } else if ($(this).attr("value") == "3 Years") {
                var lastDay = new Date(date.getFullYear(), date.getMonth() + 36, date.getDate()); 
            }
            lastMonth = ( (lastDay.getMonth() + 1) < 10) ? '0' + (lastDay.getMonth() + 1) : (lastDay.getMonth() + 1);
            lastDate = ( lastDay.getDate() < 10 ) ? '0' + lastDay.getDate() : lastDay.getDate();
            var newDate =  lastDay.getFullYear() + '/' + lastMonth + '/' + lastDate;
            if (isNaN(lastMonth) == false) $("#x_expirationdate").val(newDate);
    
            todayTimeStamp = today.getTime();
            lastDayTimeStamp = lastDay.getTime();
    
            if(todayTimeStamp > lastDayTimeStamp) {
                // expired
                // status is 1
            } else {
                // Valid
                // status is 0
            }
        });
    });
    
  2. Ваш код более сложен и неэффективен, чем это должно быть. Я предполагаю, что возвращаемое значение $("#x_installeddate").val()правильно анализируется по новой дате, что проблематично. Здесь много вопросов о разборе дат.

    В любом случае, если вы хотите создать дату на основе выбранной даты, а затем сравнить ее с сегодняшним днем, рассмотрите следующее:

    $(document).ready(function() {
      $('input[name=x_contract]:radio').click(function checkDate() {
    
        // Create a date for the selected date
        var date = new Date($("#x_installeddate").val());
    
        // Create a date for the selected period ahead from
        // the selected date    
        var values = {'Yearly':12, '2 Years':24, '3 Years':36};
        var lastDate = new Date(+date);
        lastDate.setMonth(lastDate.getMonth() + values[this.value]);
    
        // Create a string for lastDate
        var newDate = lastDate.getFullYear() + '/' +
                      ('0'+(lastDate.getMonth() + 1)).slice(-2) + '/' +
                      ('0'+lastDate.getDate()).slice(-2);
    
        // Get the current date and compare with lastDate
        var now = new Date();
        if (now < lastDate) {
          // lastDate is in the future
        } else {
          // lastDate is today or earlier
        }
      });
    });

    Было бы гораздо лучше, если значения переключателей, где годы так они возвращают значения, как 1, 2 и 3 для 1, 2 и 3 лет соответственно. Тогда вы можете сделать:

    lastDate.setMonth(lastDate.getMonth() + this.value*12);
    

    и удалите объект values.

    Переменная date не используется повторно, поэтому ее можно изменить и использовать вместо lastDate .