과제:
형식을 확인하려고 합니다. 날짜 입력 문자열은 "mm/dd/yyyy"입니다. 그러나 시도한 기존 코드 조각은 이 작업을 효과적으로 수행하지 못했습니다.
질문:
제공된 날짜 확인 코드의 근본적인 문제는 무엇입니까?
설명:
주어진 코드는 "mm/dd/yyyy" 형식을 따르는 날짜 문자열의 유효성을 검사하는 것을 목표로 합니다. 그러나 코드 내에는 코드가 올바르게 작동하지 못하게 하는 일부 오류나 불일치가 있을 수 있습니다. 코드를 검사하고 잠재적인 문제를 식별해 보겠습니다.
<code class="js">function isDate(ExpiryDate) { var objDate, // date object initialized from the ExpiryDate string mSeconds, // ExpiryDate in milliseconds day, // day month, // month year; // year // date length should be 10 characters (no more no less) if (ExpiryDate.length !== 10) { return false; } // third and sixth character should be '/' if (ExpiryDate.substring(2, 3) !== '/' || ExpiryDate.substring(5, 6) !== '/') { return false; } // extract month, day and year from the ExpiryDate (expected format is mm/dd/yyyy) // subtraction will cast variables to integer implicitly (needed // for !== comparing) month = ExpiryDate.substring(0, 2) - 1; // because months in JS start from 0 day = ExpiryDate.substring(3, 5) - 0; year = ExpiryDate.substring(6, 10) - 0; // test year range if (year < 1000 || year > 3000) { return false; } // convert ExpiryDate to milliseconds mSeconds = new Date(year, month, day).getTime(); // initialize Date() object from calculated milliseconds objDate = new Date(); objDate.setTime(mSeconds); // compare input date and parts from Date() object // if difference exists then date isn't valid if ( objDate.getFullYear() !== year || objDate.getMonth() !== month || objDate.getDate() !== day ) { return false; } // otherwise return true return true; }</code>
이 코드에서 발생할 수 있는 문제 중 하나는 월을 Month = ExpiryDate.substring(0, 2) - 1로 추출하려고 시도하는 것입니다. 그러면 월에서 1이 뺍니다. 값으로 인해 잘못된 월 수가 표시될 수 있습니다. 이를 수정하려면 월을 Month =parseInt(ExpiryDate.substring(0, 2), 10) - 1로 추출해야 합니다.
연도 처리에 또 다른 잠재적인 문제가 있습니다. 코드는 연도가 1000~3000 범위에 속하는지 확인하지만 2자리 연도(예: "19" 또는 "20") 가능성은 고려하지 않습니다. 2자리 및 4자리 연도를 모두 수용하려면 연도 추출 및 유효성 검사 논리를 다음과 같이 수정할 수 있습니다.
<code class="js">// extract year if (ExpiryDate.substring(6, 7) === '/') { year = parseInt(ExpiryDate.substring(6, 8), 10); // 2-digit year } else { year = parseInt(ExpiryDate.substring(6, 10), 10); // 4-digit year } // test year range if (year < 1000 || year > 2999) { return false; }</code>
또한 코드는 현재 "mm/dd/yyyy" 형식이 다음과 같다고 가정합니다. 엄격하게 준수합니다. 좀 더 관대하고 유연한 날짜 문자열 형식을 허용하려면(예: 슬래시 이외의 구분 문자 허용) 이에 따라 코드를 수정해야 합니다.
위 내용은 JavaScript 날짜 확인 코드가 \"mm/dd/yyyy\" 형식을 올바르게 확인하지 못하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!