#javascript #date
#javascript #Дата
Вопрос:
возникли некоторые проблемы при попытке разобраться в этом, полный новичок, когда дело доходит до JavaScript. Я пытаюсь подтвердить форму, более конкретно дату истечения срока действия кредитной карты. например, январь 2011 года был бы недействительным, но декабрь 2011 года был бы действительным и т.д. Это то, что у меня есть до сих пор:
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
Я не уверен, как использовать идентификаторы, чтобы получить то, что я хочу, буду признателен за любую помощь, заранее спасибо. примечание: У меня есть функция Validate, которая проверяет текстовое поле в моей форме, чтобы я мог каким-то образом прикрепить его к этому.
Ответ №1:
var year = document.getElementById("ExpYear").value;
var month = document.getElementById("ExpMon").value;
Если вы предпочитаете, вы можете использовать вместо этого имена; вам пришлось бы получить Validate для передачи элемента form в качестве параметра, но затем вы можете использовать theForm.ExpYear.value
и theForm.ExpMonth.value
.
Примечание: многим людям не нравятся инструкции вида, if (today.getTime() > expiry.getTime()) return false; else return true;
когда вы можете просто написать return today.getTime() <= expiry.getTime();
.
Комментарии:
1. Спасибо за ваш быстрый ответ. Я нашел ваш совет очень полезным.
Ответ №2:
Нил ответил на ваш вопрос о том, как получить значения ( 1). Я просто хотел добавить, что, ИМХО, было бы лучше для пользователей не позволять вашим пользователям выбирать неприемлемую дату истечения срока действия в первую очередь.
Это требует немного больше усилий, но в принципе, отвечая на выбранный месяц, вы могли бы посмотреть текущее время, а затем сбросить допустимые годы на основе этого месяца. Аналогично, на основе выбранного года набор допустимых месяцев будет меняться в зависимости от текущего времени.
Вместо того, чтобы позволить пользователю совершить ошибку, а затем выдавать предупреждение, просто не допускайте возможности ошибки вообще.
Ответ №3:
Следующее примет пользовательский ввод, создаст объект date, а затем сравнит его с сегодняшней датой. Одним из ключевых элементов является то, что он найдет последний день текущего месяца, так что, даже если сегодня 3 мая и пользователь выберет «Май 2011» (который действителен для транзакции по кредитной карте), он вернет «действительный».
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 /
Комментарии:
1. Гораздо лучше использовать формат даты ISO8601, чем формат, зависящий от региона. Кроме того, дата обоих месяцев должна быть установлена одинаковой (скажем, 1-го), а час, минуты и секунды сегодняшнего дня должны быть установлены равными нулю. Самый простой способ — это:
var today = new Date(); today = new Date(today.getFullYear(), today.getMonth());
2. @RobG: Хорошая точка зрения на формат даты ISO8601. Я соответствующим образом обновил свой ответ. Тем не менее, он по-прежнему сравнивает текущую дату с последним днем выбранного месяца вместо того, чтобы оба были 1-м, как вы предлагаете. Операционная система сравнивает дату с действительными датами истечения срока действия кредитной карты, которые действительны до конца месяца.
3. Это просто я чего-то не замечаю, или
last_date_of_selected_date
переменная даже не используется?
Ответ №4:
Попробуйте это:
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.");
}
Ответ №5:
Используйте эту простую проверку
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 amp;amp; expiryMonth != null amp;amp; expiryYear != null) {
currentUserDate = JSON.parse(currentUserDate);
if (expiryMonth > 0 amp;amp; 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; }
}