2009-11-19 7 views
4

У меня есть текстовое поле HTML. Я хочу проверить с помощью JavaScript, что введенное значение является допустимой датой в форме «MM/DD/YY» или «MM/D/YY» или «MM/DD/YYYY» или «MM/D/YYYY». Есть ли функция, которая делает это?JavaScript - Подтвердить дату

Я вроде предположил, что есть что-то вроде isNaN, но я ничего не вижу. Верно ли, что JavaScript не может проверять даты?

+2

Javascript не может подтвердить даты. Но вы можете проверить даты с помощью Javascript. – rogeriopvl

ответ

9

Это правда, что JavaScript не может подтвердить даты?

No.

Есть функция, которая делает это?

No.

Вам нужно будет написать свою собственную функцию проверки для разбора формата даты (регулярное выражение приходит на ум), а затем определить, если это действительно в ваших конкретных критериях.

+2

Мне нравится, как это было приостановлено, хотя я прямо ответил на оба вопроса и предоставил дополнительную информацию: P –

+8

этот ответ очень точен и совершенно бесполезен без примера – piotrga

+2

Согласен, только половина ответа – drogon

0

У вас есть googled для чего-то вроде javascript date validation? Он показывает некоторую хорошую информацию и пример рабочего кода here.

+9

Жаль, что это PITA, но если все было сказано, чтобы google это, не было бы нужды в этом сайте. Этот сайт предназначен для людей, которые предлагают советы и код, а не просто сказать google! –

+1

Разве я * просто * говорю, google? Разве вы не видите, что я дал ему (ссылку) пример кода? –

+5

Кроме того, Гэри, вы не согласны с тем, что некоторым * нужно * нужно немного рассказать Google? –

1

Если вы хотите рисковать в области JQuery, существует множество плагинов проверки, которые включают проверку даты. This plugin - это тот, который я использовал несколько раз и хорошо служил мне.

2

Отъезд http://momentjs.com/. Используя его, этот фрагмент

момент (yourCandidateString, 'MM-DD-YYYY'). IsValid()

должен делать эту работу.

0

Предлагаю вам пару решений.

  1. руководство пользователя с помощью механизма выбора даты. Таким образом, вы можете управлять форматом ввода. jQueryui datepicker - популярная реализация.

  2. использовать библиотеку js для управления типом данных datetime (а не фактическим типом данных в Javascript!). Я предлагаю вам date.js.

1
<input type="text" id="dateinput"/> 

<script type="text/javascript"> 
    $(#"dateinput").datepicker({ 
     buttonImage: "images/calendar.png", 
     dateFormat: "yyyy-MMM-dd" 
    }); 

    function validateDate() { 
     if ($(#"dateinput").val().trim() == "") { 
      // Is a blank date allowed? 
      return true; 
     } 
     var oldVal = $(#"dateinput").val(); // Current value in textbox 
     // Now use jQueryUI datepicker to try and set the date with the current textbox value 
     $(#"dateinput").datepicker("setDate",$(#"dateinput").val()); 
     // Check if the textbox value has changed 
     if (oldVal != $(#"dateinput").val()) { 
      // The datepicker will set something different if the date is invalid 
      $(#"dateinput").val(oldVal); // Set the textbox back to the invalid date 
      alert ("date was invalid"); 
      return false; 
     } else { 
      // If nothing changed, the date must be good. 
      return true; 
     } 
    } 
</script> 
6

Вы можете использовать собственный объект Date JavaScript, чтобы проверить дату. Так как объект даты позволяет несколько обманывать значения месяца и дня (например, март 32 будет исправлен до 1 апреля), вы можете просто проверить, соответствует ли дата, которую вы создаете, той, которую вы ввели. Вы можете сократить это, если хотите , но это больше для ясности.

function checkDate(m,d,y) 
{ 
    try { 

     // create the date object with the values sent in (month is zero based) 
     var dt = new Date(y,m-1,d,0,0,0,0); 

     // get the month, day, and year from the object we just created 
     var mon = dt.getMonth() + 1; 
     var day = dt.getDate(); 
     var yr = dt.getYear() + 1900; 

     // if they match then the date is valid 
     if (mon == m && yr == y && day == d) 
     return true; 
     else 
     return false; 
    } 
    catch(e) { 
     return false; 
    } 
} 
1

Не существует встроенной функции, которая делает это.Тем не менее, этот код, вероятно, что вы ищете:

<script type="text/javascript"> 

/**-------------------------- 
//* Validate Date Field script- By JavaScriptKit.com 
//* For this script and 100s more, visit http://www.javascriptkit.com 
//* This notice must stay intact for usage 
---------------------------**/ 

function checkdate(input){ 
    var validformat=/^\d{2}\/\d{2}\/\d{4}$/ //Basic check for format validity 
    var returnval=false 
    if (!validformat.test(input.value)) 
     alert("Invalid Date Format. Please correct and submit again.") 
    else{ //Detailed check for valid date ranges 
     var monthfield=input.value.split("/")[0] 
     var dayfield=input.value.split("/")[1] 
     var yearfield=input.value.split("/")[2] 
     var dayobj = new Date(yearfield, monthfield-1, dayfield) 
     if ((dayobj.getMonth()+1!=monthfield)||(dayobj.getDate()!=dayfield)||(dayobj.getFullYear()!=yearfield)) 
      alert("Invalid Day, Month, or Year range detected. Please correct and submit again.") 
     else 
      returnval=true 
    } 
    if (returnval==false) input.select() 
    return returnval 
} 

</script> 

Источник: http://www.javascriptkit.com/script/script2/validatedate.shtml

0

Это то, что я использую для проверки даты.

Date.parse возвращает NaN за недопустимые даты.

Это поддерживает как даты, так и даты + формат времени.

Надеюсь, это поможет.

var msg; 
var str = "2013-12-04 23:10:59"; 
str = "2012/12/42"; 
var resp = Date.parse(str); 
if(!isNaN(resp)) { msg='valid date'; } else { msg='invalid date'; } 
console.log(msg); 
+0

Это нехороший подход. Как уже упоминалось в ответе user1883048, некоторые из механизмов javascript будут анализировать недопустимые даты. 2/31/2014 становится 3/3/2014. 55/55/5555 становится в 2024 году в Firefox. – Quickhorn