source

날짜가 유효한지 확인합니다.

manycodes 2023. 7. 25. 21:08
반응형

날짜가 유효한지 확인합니다.

시나리오는 다음과 같습니다.

나는 있습니다String날짜 및 날짜 형식이 다릅니다.예:
날짜: 2016-10-19
dateFormat: "DD-MM-YYYY".

저는 이 날짜가 유효한 날짜인지 확인해야 합니다.

저는 다음과 같은 것들을 시도했습니다.

var d = moment("2016-10-19",dateFormat);

d.isValid()돌아오는 중false매회Moment.js는 지정된 형식으로 날짜를 구문 분석하지 않습니까?

그런 다음 날짜 형식을 지정하려고 했습니다.DD-MM-YYYY먼저 Moment.js에 전달합니다.

var d = moment("2016-10-19").format(dateFormat);
var date = moment(d, dateFormat);

지금이다date.isValid()원하는 결과를 제공하지만 여기서 Moment.js 날짜 개체가 두 번 만들어집니다.어떻게 하면 피할 수 있을까요?더 좋은 해결책이 있습니까?

참고로 저는 변경할 수 없습니다.dateFormat.

해결책을 찾을 수 있었습니다.제가 받는 날짜가 ISO 형식이기 때문에 dateFormat을 전달할 필요 없이 dateFormat만 제공하면 유효합니다.

var date = moment("2016-10-19");

그리고 나서.date.isValid()원하는 결과를 제공합니다.

var date = moment('2016-10-19', 'DD-MM-YYYY', true);

호출할 때 세 번째 인수를 추가해야 합니다.moment엄격한 구문 분석을 수행합니다.다음은 모멘트 문서 http://momentjs.com/docs/ #/moment/string-format/의 관련 부분입니다. 이 문서는 섹션의 끝에 있습니다.

방금 정말 엉망인 사건을 발견했습니다.

moment('Decimal128', 'YYYY-MM-DD').isValid() // true

날짜 및 날짜 형식이 다른 경우 Moment를 사용하여 문자열이 유효한 날짜인지 확인하는 방법

죄송합니다. 이 스레드에서 제공된 솔루션 중 실제로 질문에 답변한 솔루션이 있습니까?

String 날짜와 날짜 형식이 다릅니다.예: date: 2016-10-19 dateFormat: "DD-MM-YYYY" 이 날짜가 유효한지 확인해야 합니다.

다음은 저에게 도움이 됩니다.

const date = '2016-10-19';
const dateFormat = 'DD-MM-YYYY';
const toDateFormat = moment(new Date(date)).format(dateFormat);
moment(toDateFormat, dateFormat, true).isValid();

// Note I: `new Date()` circumvents the warning that
//   Moment throws (https://momentjs.com/guides/#/warnings/js-date/),
//   but may not be optimal.

// Note II: passing `true` as third argument to `moment()` enables strict-mode
//   https://momentjs.com/guides/#/parsing/strict-mode/

하지만 솔직히, 왜 그런지 이해할 수 없습니다.moment.isDate()(문서화된 대로) 개체만 허용합니다.제 생각에도 끈을 지지해야 합니다.

여기 있습니다.작업 피들

$(function(){
  var dateFormat = 'DD-MM-YYYY';
  alert(moment(moment("2012-10-19").format(dateFormat),dateFormat,true).isValid());
});

새로운 날짜와 함께 모멘트를 사용하여 다음의 사례를 처리합니다.undefined데이터 값:

const date = moment(new Date("2016-10-19"));

이유:moment(undefined).isValid() == true

반면에 더 나은 방법은:moment(new Date(undefined)).isValid() == false

console.log(` moment('2019-09-01', 'YYYY-MM-DD').isValid()?  ` +moment('2019-09-01', 'YYYY-MM-DD').isValid())
console.log(` moment('2019-22-01', 'YYYY-DD-MM').isValid()?  ` +moment('2019-22-01', 'YYYY-DD-MM').isValid())
console.log(` moment('2019-22-22', 'YYYY-DD-MM').isValid()?  ` +moment('2019-22-22', 'YYYY-DD-MM').isValid())
console.log(` moment('undefined', 'YYYY-DD-MM').isValid()?  ` +moment('undefined', 'YYYY-DD-MM').isValid())

 moment('2019-09-01', 'YYYY-MM-DD').isValid()?  true
 moment('2019-22-01', 'YYYY-DD-MM').isValid()?  true
 moment('2019-22-22', 'YYYY-DD-MM').isValid()?  false
 moment('undefined', 'YYYY-DD-MM').isValid()?  false

제가 사용한 것은 moment.js입니다.

let value = '19-05-1994';
let check = moment(value,'DD-MM-YYYY', true).isValid();
        console.log(check) //returns true
        return check

날짜가 유효한 경우getTime()항상 자신과 동등할 것입니다.

var date = new Date('2019-12-12');
if(date.getTime() - date.getTime() === 0) {
    console.log('Date is valid');
} else {
    console.log('Date is invalid');
}

사용할 수 있습니다.

var d = moment("2016-10-19",dateFormat);
if(!isNaN(d)) {
  // d is a valid date.
}
moment("2022-10-18 04:00 AM", "YYYY-MM-DD HH:mm AM", true).isValid()

이거 드셔보세요.이것은 좋지 않지만 달력 보기의 입력이 일정한 형식이면 작동합니다.

이 예제의 선택기에서 오는 날짜가 잘못되었습니다.

https://jsfiddle.net/xs8tvox9/

var dateFormat = 'DD-MM-YYYY'
var badDate = "2016-10-19";

var splittedDate = badDate.split('-');

if (splittedDate.length == 3) {
  var d = moment(splittedDate[2]+"-"+splittedDate[1]+"-"+splittedDate[0], dateFormat);
  alert(d.isValid())
} else {
  //incorrectFormat
}

언급URL : https://stackoverflow.com/questions/40123747/check-if-date-is-a-valid-one

반응형