2016-05-26 71 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的。