2016-05-26 112 views
0

我有这样的代码:的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中解决此问题:)?

谢谢

+0

你好,你可以做一个小提琴/例如这个请。会让别人更容易尝试解决这个问题。 – thepio

+0

您还没有标记任何库或框架,但显然有一些正在使用。如果你这样做会有帮助。 – RobG

+0

* lastDay *被宣布3次,* lastMonth *和* lastDay *根本没有声明,所以在代码运行时变为全局。 'NNN(lastMonth)'将成为什么时候? '$(“#x_installeddate”)。val()'返回什么值? – RobG

回答

0

在下面的代码时标进行比较当前日期和计算的最后日期间找到的最后日期是否过期或仍然有效。

我希望这会有所帮助。

$(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 
     } 
    }); 
}); 
+0

状态是数据库中的另一列,例如列:到期日期值:2016-05-25列:状态值:1 – Laj

+0

@Laj您可以在'if'' else'循环内使用ajax调用来将更新发送到后端脚本(例如:filename.php)根据需要更新数据库列。 – dinesh

0

您的代码比需要的更复杂,效率也更低。我假设$("#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); 

并取出对象。

日期变量没有再利用,所以它可被修改和代替lastDate的。