일부 작업을 수행하기 위해 날짜 프로토 타입의 일부 확장 기능을 사용했습니다. (조언 : 그렇게하지 마십시오. 현재 프로젝트에서 나에게 너무 늦었습니다.) 평소보다 더 많은 이슈. 자바 스크립트가 제대로 파싱되지 않습니다.
는 H에서 문자열을 구문 분석하려면, n 형식, 나는 사용자 정의 함수를 만들어이 같은 날짜 프로토 타입에 할당 :Date.__parse = Date.parse;
Date.parse = function(string){
var pattern = /^\d{1,2}:\d{1,2}/ig;
var today = new Date();
if (pattern.exec(string)){
var year = today.getFullYear();
var month = today.getMonth()+1;
var day = today.getDate();
var t = year+"-"+month+"-"+day+" "+string;
var timestamp = Date.__parse(t);
return new Date(timestamp);
}
else{
return new Date(Date.__parse(string));
}
}
미운 최근까지 날짜 개체 만 작업을 로그온 할 때.
한동안 Date.parse는 "d-m-Y"형식의 날짜로 작동하지만 최근에는 "invalid date"를 반환합니다.
주요 브라우저가 날짜를 구문 분석하거나 사양을 변경하는 방식이 변경되었거나 이전에 오류가 있었던 것으로 가정해야만하고 행운 이었기 때문에 "잘못된 날짜"가 표시되지 않았습니까? (주로 입력 필드의 유효성을 검사하는 함수를 사용하므로 주목받지 못합니다.)
내 자신의 날짜 스크립트를 작성해야하고 js Date 객체를 완전히 잊어 버릴 것 같아요. 정말 끔찍한데 (moment.js를 사용하려고했지만, 사용하는 구성 요소의 성능이 매우 좋지 않았습니다. 왜 사용자 정의 함수를 만들어야하는지).
더 나은 이해를 위해 편집
; 내가 일을하고 있었는지
이 작동 듯 : 나는 유효성 검사 오류를 추적 한 후 무엇을 발견
Date.parse("23-7-2016") // Never got an error, expected 23 Jul 2016
:
var startDate = Date.parse("23-7-2016");
console.log(startDate.toISOString()); //Got Invalid Date
무슨 일이 있었했다고 생각 무엇
var startDate = Date.parse("12-7-2016");
// expected 12 Jul 2016, got 7 Dec 2016, silently fails, everyone is happy
왜 나는 이전 생각합니다. 대소 문자가 혼동되지 않는 경우 : 대화식 스케줄러를 사용하고 수천 개의 테스트를 수행했지만 거의 이러한 오류가 눈에 띄지 않게되었습니다.
최악의 시나리오 : 크롬이 날짜를 구문 분석하는 방식을 업데이트하고 변경했습니다.
확실하지 않습니다 ... 누군가 나를 계몽 할 수 있기를 바랍니다.
당신이이 기능을 제공 값에 대한 몇 가지 입력 예제를 줄 수 있습니까? 또한 일반적인 질문 - 왜 날짜를 문자열로 바꾸고 그 반대도 마찬가지입니까? 일부 외부 소스에서 날짜를 문자열로 얻거나 클라이언트 - 서버 통신을 위해 날짜를 입력했기 때문입니까? –
나는 pattern.exec 대신 예제를 기반으로 pattern.test를 사용해야한다고 생각한다. –
미안하지만 예제가 너무 광범위 할 것이다. 내가 주로하는 일은 월 달력, 주 일정 또는 일일 일정으로 볼 수있는 이벤트 스케줄러입니다. 예를 들어 주간보기에서는 weekDays 이상 반복 한 다음 몇 시간에 걸쳐 이벤트를 후크하고 나중에 그려야합니다. 이 기능의 일부는 이벤트를 추가하는 것이므로 날짜를 반복 할 때 읽을 수있는 현지화 된 문자열로 변환해야합니다 (텍스트 파서를 전체적으로 게시하지 않음). 그리고 viceversa. 하루를 클릭하면 날짜 값을 저장해야합니다 ... 등등. – sergio0983