이것은 그룹의 친구가 묻는 질문입니다. 그 당시 나는 그 날이 인접한 지 판단 할 수 있다고 말했다. 나중에, 나는 그것에 대해 신중하게 생각했고 그것이 완전히 잘못되었다는 것을 알았습니다.
문제 요구 사항
동일한 형식의 5 일 날짜가 주어지면 5 일 연속 여부를 어떻게 결정합니까?
나의 첫 번째 반응은 getday ()를 정리 한 다음 전후에 비교하는 것이 었습니다. .
그러나 신중하게 생각하면 완전히 잘못되었습니다. 예를 들어, 이것은 잘못 판단됩니다.
그리고 그것은 그러한 문제 일뿐 만 아니라 달을 넘어, 새해 전날, 도약의 달 및 기타 문제를 넘어 섰습니다.
그런 다음 다음 코드가 있습니다.
타임 스탬프가 모든 것을 부드럽게하십시오
이러한 문제에 대해 걱정하지 않기 위해 타임 스탬프를 생각 했으며이 사람은 위의 문제를 완전히 무시할 수 있습니다. 타임 스탬프를 처리하고 결국 비교하십시오.
그런 다음 다음 코드를 제공했습니다.
Days = [ '2016-02-28', '2016-02-29', // Leap Month'2016-03-01 ', // Cross Month'2016-03-02', '2016-03-03',] // 먼저 정렬 한 다음 _days = days.sort ()를 돌리십시오 (D, I). dt.setdate (dt.getDate () + 4 -i) // 같은 날짜로 처리 return + dt}) // 타임 스탬프가 동일한 콘솔인지 여부 (_days [0] == _days [1] && _days [0] == _days [2] && _days [3] && _days [3] && _days [3]. _days [4]
OK 모든 문제가 해결되었으며 새해를 건너거나 달을 건너거나 도약하는 경우는 중요하지 않습니다.
일반 기능 캡슐화
위의 코드는 시간, 분 및 두 번째가 처리되지 않기 때문에 여전히 약간 결함이 있으며, 시간, 분 및 두 번째 시간이 있으면 먼저 지워야합니다.
Days = [ '2016-02-28 12:00:00', '2016-02-29 12:00:01', // Leap Month'2016-03-01 12:00:02 ', // Cross-Month'2016-03-02 12:00:03', '2016-03-03 12:00:04', '2016-03-04' 12:00:04 ',] console.log (contindays (days)) 함수 coundays (arr_days) {// 먼저 정렬 된 다음 타임 스탬프를 바꾸면 days = arr_days.sort (). map ((d, i) => {dt = dt.setdate (dt.getdate () + 4- i) // rets, ters on ters and and and and and and regess let dt = let dt = dt = new 날짜 (dt = dt = dt = dt = let dt = let dt = let dt = milliseconds, dt.setminutes (0) dt.setseconds (0) dt.setmilliseconds (0) return +dt}) let = true days.foreach (d => {if (days [0]! = false}}) retur ret}를 보자.이 기능은 시간, 분, 두 번째, 밀리 초 및 루프 비교를 지우는 2 개의 장소에서 변경되며 다른 기능은 동일합니다.
요약
JS의 처리 시간은 여전히 매우 간단합니다. 예를 들어, 날짜 플러그인을 작성하는 것은 실제로 날짜의 도움으로 구현하기가 매우 쉽지만 날짜 API를 이해해야합니다.
물론, 그것이 간단하거나 PHP가 가장 간단하다고 말하는 것은 단순히 놀랍습니다.
일련의 날짜가 연속적인지 판단하는 위의 간단한 예는 내가 당신과 공유하는 모든 내용입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.