月份和年份的有效期限
在尝试解决这个问题时遇到了一些麻烦,当谈到JavaScript时完成新手。我试图验证一个表格,更具体的信用卡到期日。 例如,2011年1月将是无效的,但2011年12月将是有效的等等 这是我到目前为止有:月份和年份的有效期限
function ExpiryDate() {
var year
var months
today = new Date();
expiry = new Date(year, month);
if (today.getTime() > expiry.getTime())
return false;
else
return true;
};
我读形式:
<form id="myform" method="post" action="default.html" onsubmit="return Validate(this);">
<p>Expiration Date: Month
<select name="ExpMon" id="ExpMon" title="select a month">
<option value="1">Jan</option>
<option value="2">Feb</option>
<option value="3">Mar</option>
<option value="4">Apr</option>
<option value="5">May</option>
<option value="6">June</option>
<option value="7">July</option>
<option value="8">Aug</option>
<option value="9">Sept</option>
<option value="10">Oct</option>
<option value="11">Nov</option>
<option value="12">Dec</option>
</select>
Year:
<select name="ExpYear" id="ExpYear" title="select a year">
<option value="2010">2010</option>
<option value="2011">2011</option>
<option value="2012">2012</option>
<option value="2013">2013</option>
<option value="2014">2014</option>
<option value="2015">2015</option>
</select></p>
</form
我不知道如何使用ID来得到我想要的,任何帮助将不胜感激,在此先感谢。注意:我有一个名为Validate的函数,它验证了我的表单中的文本字段,所以我可以以某种方式将它附加到此。
var year = document.getElementById("ExpYear").value;
var month = document.getElementById("ExpMon").value;
如果你愿意,你可以使用的名称来代替;您必须获得验证才能将表单元素作为参数传递,但您可以使用theForm.ExpYear.value
和theForm.ExpMonth.value
。
注意:很多人不喜欢if (today.getTime() > expiry.getTime()) return false; else return true;
形式的陈述,你可以简单地写。
Neil回答了您有关如何获取值(+1)的问题。我只想补充一点,恕我直言,这将是一个更好的用户体验,而不是让用户首先选择一个不可接受的失效日期。
这是一个更多的努力,但基本上,通过响应选定的月份,您可以查看当前时间,然后根据该月重置允许年份。同样,根据所选年份,允许月份的设置将根据当前时间而变化。
与其让用户犯错,然后发出警告,不要让错误成为可能。
下面将采取用户输入,创建一个日期对象,然后将它与今天的日期进行比较。一个关键的问题是它会找到当前月份的最后一天,因此即使今天是5月3日并且用户选择“2011年5月”(对信用卡交易有效),它也会返回“有效”。
function CheckDate() {
var selectedDate = new Date (document.getElementById("ExpYear").value,document.getElementById("ExpMon").value)
var nextmonth = selectedDate.setMonth(selectedDate.getMonth() + 1);
var last_date_of_selected_date = new Date(nextmonth -1);
var today = new Date();
if (today > selectedDate) {
alert("Invalid");
}
else {
alert("Valid");
}
}
这里有一个工作的jsfiddle看到这个动作:http://jsfiddle.net/cPApB/3/
使用ISO8601日期格式比特定区域更好。此外,两个月的日期应该设置为相同的(比如第一个),今天的小时,分钟和秒应该设置为零。最简单的方法是:'var today = new Date(); today = new Date(today.getFullYear(),today.getMonth());' – RobG 2011-05-04 00:44:08
@RobG:ISO8601日期格式的好处。我相应地更新了我的答案。但是,它仍然会将当前日期与选定月份的最后一天进行比较,而不是像您所建议的那样是第一天。 OP将该日期与有效的信用卡有效期限进行比较,有效期至本月底有效。 – 2011-05-04 13:26:43
感谢您的帮助......这非常有用。 – Hatzi 2011-05-04 21:04:06
使用这种简单的验证
var expiryYear = $('#<%# DataBinder.Eval (ddlYear,"ClientID") %> option:selected').val();
var expiryMonth = $('#<%# DataBinder.Eval (ddlValidMonths,"ClientID") %> option:selected').val();
var currentUserDate = $('#<%# DataBinder.Eval (hdnFieldJsonDate,"ClientID") %>').val();
if (currentUserDate != null && expiryMonth != null && expiryYear != null) {
currentUserDate = JSON.parse(currentUserDate);
if (expiryMonth > 0 && expiryYear > 0) {
//If the Expiry Year smaller than Current Year, then validation failed
if (expiryYear < currentUserDate.Year)
{ args.IsValid = false; }
//If the Expiry Year larger than Current Year, then validation passed
else if (expiryYear > currentUserDate.Year)
{ args.IsValid = true; }
//If the Expiry Year is same as Current Year, and if Expiry Month is smaller than current month, then validation failes, else passed.
else if (expiryYear == currentUserDate.Year) {
if (expiryMonth < currentUserDate.Month)
args.IsValid = false;
else
args.IsValid = true;
}
}
else
{ args.IsValid = true; }
}
试试这个:
var today = new Date();
var expDate = new Date($("#cart-expyear").val(),($("#cart-expmonth").val()-1)); // JS Date Month is 0-11 not 1-12 replace parameters with year and month
if(today.getTime() > expDate.getTime()) {
console.log("Your Card is expired. Please check expiry date.");
}
感谢您的及时响应。我发现你的建议非常有帮助。 – Hatzi 2011-05-04 15:23:00