JS에서 유효하고 유효하지 않은 날짜 객체의 차이점을 말하고 싶지만 방법을 알 수 없습니다.
var d = new Date("foo");
console.log(d.toString()); // shows 'Invalid Date'
console.log(typeof d); // shows 'object'
console.log(d instanceof Date); // shows 'true'
isValidDate
함수 작성에 대한 아이디어가 있습니까?
- Ash는
Date.parse
날짜 문자열을 구문 분석하는 데 권장 되며 날짜 문자열이 유효한지 확인하는 신뢰할 수있는 방법을 제공합니다. - 가능한 경우 API가 Date 인스턴스를 수락하고 유효한지 여부를 확인 / 주장 할 수있게하는 것이 좋습니다. Borgar의 솔루션은 그렇게하지만 브라우저에서 테스트해야합니다. 또한 더 우아한 방법이 있는지 궁금합니다.
- Ash는 API 수락
Date
인스턴스를 전혀 사용하지 않는 것을 고려 했습니다. 이는 확인하는 것이 가장 쉽습니다. - Borgar는
Date
인스턴스 테스트를 제안한 다음Date
시간 값 을 테스트 하도록 제안했습니다 . 날짜가 유효하지 않은 경우 시간 값은NaN
입니다. ECMA-262로 확인 했는데이 동작은 표준이며 정확히 내가 찾는 것입니다.
답변
내가하는 방법은 다음과 같습니다.
if (Object.prototype.toString.call(d) === "[object Date]") {
// it is a date
if (isNaN(d.getTime())) { // d.valueOf() could also work
// date is not valid
} else {
// date is valid
}
} else {
// not a date
}
업데이트 [2018-05-31] : 다른 JS 컨텍스트 (외부 창, 프레임 또는 iframe)의 Date 객체와 관련이없는 경우이 간단한 양식이 선호 될 수 있습니다.
function isValidDate(d) {
return d instanceof Date && !isNaN(d);
}
답변
사용하는 대신 new Date()
다음을 사용해야합니다.
var timestamp = Date.parse('foo');
if (isNaN(timestamp) == false) {
var d = new Date(timestamp);
}
Date.parse()
01 / Jan / 1970 이후의 밀리 초 수를 나타내는 정수인 타임 스탬프를 반환합니다. NaN
제공된 날짜 문자열을 구문 분석 할 수 없으면 리턴 됩니다.
답변
당신은 통해 Date
객체 의 유효성을 확인할 수 있습니다d
d instanceof Date && isFinite(d)
교차 프레임 문제를 피하기 위해 instanceof
수표를
Object.prototype.toString.call(d) === '[object Date]'
에 대한 호출 getTime()
에서와 같이 Borgar의 대답은 같은 불필요 isNaN()
하고 isFinite()
모두 암시 적으로 숫자로 변환.
답변
내 솔루션은 유효한 날짜 개체가 있는지 간단히 확인하는 것입니다.
이행
Date.prototype.isValid = function () {
// An invalid date object returns NaN for getTime() and NaN is the only
// object not strictly equal to itself.
return this.getTime() === this.getTime();
};
용법
var d = new Date("lol");
console.log(d.isValid()); // false
d = new Date("2012/09/11");
console.log(d.isValid()); // true
답변
유효한 날짜를 확인하는 가장 짧은 답변
if(!isNaN(date.getTime()))
답변
간단히 moment.js 를 사용할 수 있습니다
예를 들면 다음과 같습니다.
var m = moment('2015-11-32', 'YYYY-MM-DD');
m.isValid(); // false
문서 의 유효성 검사 섹션 은 매우 분명합니다.
또한 다음 구문 분석 플래그는 유효하지 않은 날짜를 초래합니다.
overflow
: 13 번째 달, 32 번째 날 (또는 윤년이 아닌 2 월 29 일), 367 번째 날 등의 날짜 필드 오버플로에는 잘못된 단위의 인덱스가 포함됩니다. #invalidAt와 일치합니다 (아래 참조). -1은 오버플로가 없음을 의미합니다.invalidMonth
: moment ( ‘Marbruary’, ‘MMMM’);과 같은 잘못된 월 이름입니다. 잘못된 월 문자열 자체를 포함하거나 그렇지 않은 경우 널을 포함합니다.empty
: moment ( ‘this is nonsense’);와 같이 구문 분석이 불가능한 입력 문자열. 부울.- 기타.
출처 : http://momentjs.com/docs/
답변
jQuery UI DatePicker 위젯에는 형식 및 유효성을 확인하는 매우 유용한 날짜 유효성 검증기 유틸리티 메소드가 있습니다 (예 : 01/33/2013 날짜는 허용되지 않음).
페이지에서 datepicker 위젯을 UI 요소로 사용하지 않더라도 항상 .js 라이브러리를 페이지에 추가 한 다음 유효성 검사기 메서드를 호출하여 유효성을 검사하려는 값을 전달할 수 있습니다. 삶을 더 쉽게 만들기 위해 JavaScript Date 객체가 아닌 입력으로 문자열을 사용합니다.
보다: http://api.jqueryui.com/datepicker/
메소드로 표시되지는 않지만 유틸리티 함수로 표시됩니다. “구문 분석”페이지를 검색하면 다음을 찾을 수 있습니다.
$ .datepicker.parseDate (format, value, settings)-지정된 형식의 문자열 값에서 날짜를 추출합니다.
사용법 예 :
var stringval = '01/03/2012';
var testdate;
try {
testdate = $.datepicker.parseDate('mm/dd/yy', stringval);
// Notice 'yy' indicates a 4-digit year value
} catch (e)
{
alert(stringval + ' is not valid. Format must be MM/DD/YYYY ' +
'and the date value must be valid for the calendar.';
}
(날짜 형식을 지정하는 자세한 정보는 http://api.jqueryui.com/datepicker/#utility-parseDate에 있습니다. )
위의 예에서는 ’01 / 03 / 2012 ‘가 지정된 형식의 달력 유효 날짜이므로 경고 메시지가 표시되지 않습니다. 그러나 ‘stringval’을 ’13 / 04 / 2013 ‘과 동일하게 만든 경우 값 ’13 / 04 / 2013’이 달력이 아니므로 경고 메시지가 표시됩니다.
전달 된 문자열 값이 성공적으로 구문 분석되면 ‘testdate’의 값은 전달 된 문자열 값을 나타내는 Javascript Date 객체입니다. 그렇지 않으면 정의되지 않은 것입니다.