Перевірка дати Javascript, якщо введена дата, була в минулому

Привіт всім, я створив сценарій для перевірки форми, все, що мені потрібно зробити зараз, перевірити, чи дата не була в минулому. Я використав набір substr але це, здається, не працює, будь ласка, може хтось допоможе. Нижче мій код, частина дати є донизу.

function validateForm() {
// this part of the script will collate all errors into one should the user leave an input blank
var Fname=document.forms["myForm"]["fname"].value;
var Lname=document.forms["myForm"]["lname"].value;
var address=document.forms["myForm"]["addr1"].value;
var postcode=document.forms["myForm"]["pcode"].value;
var email=document.forms["myForm"]["email"].value;
var number=document.forms["myForm"]["tel"].value;
var date=document.forms["myForm"]["mydate"].value;
if (Fname==null || Fname=="" ||Lname==null || Lname=="" ||address==null || address=="" ||!postcode||!email||!number||( myForm.sex[0].checked == false ) && ( myForm.sex[1].checked == false )||(myForm.age[0].checked == false )&&(myForm.age[1].checked == false )&&(myForm.age[2].checked == false )&&(myForm.age[3].checked == false )&&(myForm.age[4].checked == false )||!date)
  {
  alert("Please make sure all fields are filled or checked correctly out ");
  return false;
  } 
  //end of collating script
  //start of postcode script
 var regPostcode = /^[a-zA-Z]{1,2}\d[\dA-Za-z]? \d[a-zA-Z]{2}$/;
if (!postcode.match(regPostcode))
{
    alert("That Post Code is incorrect, correct way mk4 4tr");
    return false;
}
//end of postcode script
//start of email script
var regEmail =/^\[email protected]\S+\.\S+$/;

if (!email.match(regEmail))
{
    alert("That email is incorrect");
    return false;
}


// end of email script
// start of phone number script
 var phonestring = /^(?:0|\+44)[12378]\d{8,9}$/;
if (!number.match(phonestring))
{
    alert(" incorrect,correct format 01908234874");
    return false;
}
// end of phone script
//start of gender script

if ( ( myForm.sex[0].checked == false ) && ( myForm.sex[1].checked == false ) ) 
{
alert ( "Please choose your Gender: Male or Female" ); 
return false;
}
// end of gender script
//start of age group script
if((myForm.age[0].checked == false )&&(myForm.age[1].checked == false )&&(myForm.age[2].checked == false )&&(myForm.age[3].checked == false )&&(myForm.age[4].checked == false )){
alert("please select an age group");
return false;
}
// end of age script
//start of datefield
var dateformat=/^(?:(?:31\/(?:0[13578]|1[02])|(?:29|30)\/(?:0[13-9]|1[012])|(?:0[1-9]|1\d|2[0-8])\/(?:0[1-9]|1[0-2]))\/[2-9]\d{3}|29\/02\/(?:[2-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[3579][26])00))$/;
if (!date.match(dateformat))
{
    alert("format incorrect use dd/mm/yyyy make sure you are entering correct days to the month remember 30 days have september, april, june & november, only 28 days in february unless leap year next is 2016");
    return false;
}
var today = new Date();

var courseYear =string.substr(6,4)//use substr or substring to capture the last four digits
var courseMonth =string.substr(3,2)//use substr or substring to capture the four and fifth digits
var courseDay = string.substr(0,2)// use substr or substring to capture the first and second digits

var dateToCompare = new Date(courseYear, courseMonth, courseDay);

if (dateToCompare < today) {
alert("this date is in the past"); 
return false; }

//end of date field
else
{ alert(" Thank you a member of our team will get back to you shortly");

return true;}
}
1
чому ви не використовуєте jqueryui date-plugin?
додано Автор Jigar Jain, джерело
@ Jigar: опис тесту JS містить "Якщо використовується бібліотека чи структура, то позначте запит відповідними тегами" , немає тегу jQ, так що це може бути причиною того, чому OP не використовує плагін
додано Автор Elias Van Ootegem, джерело
Замість того, щоб перешкоджати введенням тексту, чому б не використовувати новий <input type = "date" /> , що заощадить вам багато проблем
додано Автор Elias Van Ootegem, джерело
Ви також можете подивитися на moment.js: momentjs.com
додано Автор fero, джерело

6 Відповіді

Це виглядає не так:

var courseYear = string.substr(6,4)//use substr or substring to capture the last four digits
var courseMonth = string.substr(3,2)//use substr or substring to capture the four and fifth digits
var courseDay = string.substr(0,2)//

Вона повинна бути:

var courseYear =date.substr(6,4);
var courseMonth =date.substr(3,2);
var courseDay = date.substr(0,2);

Otherwise it is fine: http://jsfiddle.net/balintbako/mKmaE/

Ви все ще можете розглянути можливість використання плагіна jQuery для перевірки форми.

2
додано
або var parts = date.split ("/"); courseYear = parts [2]; courseMonth = parseInt (частини [1], 10); courseDay = parseInt (частини [0], 10);
додано Автор mplungjan, джерело
Створіть масив помилок на початку і натисніть на неї нові помилки. В кінці перевірити, чи він порожній, і відображати помилку, якщо вона не ...
додано Автор Balint Bako, джерело
Я оновлю скрипку у відповідь. Перевірте там, це не надто елегантне рішення (попередження). Таким чином, ви можете створити стильну частину на сторінці, а потім встановити вміст цього елемента.
додано Автор Balint Bako, джерело
new Date() без аргументів завжди повертає поточну дату
додано Автор xmashallax, джерело
Замість того, щоб використовувати alert , ви збираєте додавати всі повідомлення про помилки до рядка та виводять це в кінці
додано Автор xmashallax, джерело
о так, я бачу те, що я зробив неправильно, дякую вам, що я дам тобі йти, моя ва сьогодні = нова Дата бути date = "24/06/2014?
додано Автор adam, джерело
Так, я думаю, що я буду використовувати jQuery наступного разу, але просто змінюючи це на сьогоднішній день. substr це зараз працює одне інше питання, як я можу поєднати всі помилки попередження разом замість одного за раз. Дякую за твою допомогу:)
додано Автор adam, джерело
Привіт Балінт Я новачок в javascript, тому я трохи невпевнений, як це зробити, у вас є електронний лист, де я можу ввімкнути вас, щоб ви могли точно показати, що робити, будь ласка
додано Автор adam, джерело

Не впевнений, що регулярний вираз - найпростіший спосіб підтвердити дату. Розгляньте відповідь тут: Перевірте, чи дійсна дата .

Після того, як ви перетворите рядок в об'єкт дат (2 рядка коду), ви можете перевірити, чи це раніше, використовуючи:

if ( d < new Date()) {
 //date is in the past
}

Я не думаю, що існує будь-яка цінність для наполягання на пройдені значення для дати та місяця, звичайно, достатньо д/м/рррр.

0
додано

Не впевнений, що регулярний вираз - найпростіший спосіб підтвердити дату. Розгляньте відповідь тут: Перевірте, чи дійсна дата .

Після того, як ви перетворите рядок в об'єкт дат (2 рядка коду), ви можете перевірити, чи це раніше, використовуючи:

if ( d < new Date()) {
 //date is in the past
}

Я не думаю, що існує будь-яка цінність для наполягання на пройдені значення для дати та місяця, звичайно, достатньо д/м/рррр.

0
додано
       $split_array = ($('#MyText_input_1').val());//alert($split_array);
       //ex. 31-Oct-2013
       /*** past date validation script ***/
        var c = $split_array[0];//this is the format of the date coming in.
        var temp = new Array();
        temp = c.split('-');

        var x = new Date ( temp[1]+" "+temp[0]+", "+temp[2] );
        //alert((new Date().getTime()));
        if (x.getTime() < (new Date().getTime())) {
            alert('past date');
            return false;
        }
       /*** end script ***/
0
додано
       $split_array = ($('#MyText_input_1').val());//alert($split_array);
       //ex. 31-Oct-2013
       /*** past date validation script ***/
        var c = $split_array[0];//this is the format of the date coming in.
        var temp = new Array();
        temp = c.split('-');

        var x = new Date ( temp[1]+" "+temp[0]+", "+temp[2] );
        //alert((new Date().getTime()));
        if (x.getTime() < (new Date().getTime())) {
            alert('past date');
            return false;
        }
       /*** end script ***/
0
додано
       $split_array = ($('#MyText_input_1').val());//alert($split_array);
       //ex. 31-Oct-2013
       /*** past date validation script ***/
        var c = $split_array[0];//this is the format of the date coming in.
        var temp = new Array();
        temp = c.split('-');

        var x = new Date ( temp[1]+" "+temp[0]+", "+temp[2] );
        //alert((new Date().getTime()));
        if (x.getTime() < (new Date().getTime())) {
            alert('past date');
            return false;
        }
       /*** end script ***/
0
додано
ІТ КПІ - JavaScript
ІТ КПІ - JavaScript
504 учасників

співтовариство javascript розробників в Telegram