Moment.js : 날짜 사이의 날짜


118

주어진 날짜가 두 날짜 사이에 있으면 Moment.js로 감지하려고합니다. 버전 2.0.0 이후, 팀 추가 isBefore()isAfter()날짜 비교합니다.

isBetween()방법 이 없기 때문에 이것이 효과가 있다고 생각했습니다.

var date = moment("15/02/2013", "DD/MM/YYYY");
var startDate = moment("12/01/2013", "DD/MM/YYYY");
var endDate = moment("15/01/2013", "DD/MM/YYYY");

if (date.isBefore(endDate) && date.isAfter(startDate) || (date.isSame(startDate) || date.isSame(endDate)) ) { alert("Yay!"); } else { alert("Nay! :("); }

나는 이것을하기위한 더 나은 방법이있을 것이라고 확신한다. 어떤 아이디어?


당신이 원한다고 확신 해요 ? isBetween || isStart || isEnd
Bergi

예, 오타입니다. 죄송합니다!
Joel A. Villarreal Bertoldi 2013

답변:


82

moment 플러그인 -> moment-range 중 하나를 사용 하여 날짜 범위를 처리 할 수 ​​있습니다.

var startDate = new Date(2013, 1, 12)
  , endDate   = new Date(2013, 1, 15)
  , date  = new Date(2013, 2, 15)
  , range = moment().range(startDate, endDate);

range.contains(date); // false

1
플러그인을 어떻게 포함합니까?

2
momentjs 다음에 <script src = "/ javascripts / moment-range.js"> </ script>를 포함해야합니다.
Lukasz Koziara

53
date.isBetween (startDate, endDate); 훨씬 간단하고 추가 플러그인이 필요하지 않습니다.
Brendan Nee

moment & moment-Range는 범위를 준비하는 동안 날짜 시간 형식을 지정한 다음 포함 / 이내 / 겹침 / 교차 / 더하기 / 빼기의 날짜를 비교하는 옵션을 제공합니다. 특정 형식으로 날짜를 검색하는 사람이 있으면 해당 날짜를 필요한 형식으로 변환하여 배열 내에서 날짜 범위를 준비한 다음 비교할 수 있습니다.
Sajjad Ali Khan

277

에서 버전 2.9+ 거기입니다 isBetween기능을하지만, 독점이다 :

var compareDate = moment("15/02/2013", "DD/MM/YYYY");
var startDate   = moment("12/01/2013", "DD/MM/YYYY");
var endDate     = moment("15/01/2013", "DD/MM/YYYY");

// omitting the optional third parameter, 'units'
compareDate.isBetween(startDate, endDate); //false in this case

포괄적 인 해결 방법이 있습니다 ...
x.isBetween(a, b) || x.isSame(a) || x.isSame(b)

... 논리적으로 다음과 같습니다.
!(x.isBefore(a) || x.isAfter(b))


에서 버전 2.13isBetween 함수는 네 번째의 선택적 매개 변수가 있습니다 inclusivity.

다음과 같이 사용하십시오.

target.isBetween(start, finish, 'days', '()') // default exclusive
target.isBetween(start, finish, 'days', '(]') // right inclusive
target.isBetween(start, finish, 'days', '[)') // left inclusive
target.isBetween(start, finish, 'days', '[]') // all inclusive

고려할 추가 단위 : years, months, days, hours, minutes, seconds, milliseconds

참고 : 단위는 여전히 선택 사항입니다. null세 번째 인수로 사용 하여 밀리 초가 기본 단위 인 단위를 무시합니다.

공식 문서 방문


3
문서에 명시된 바와 같이 isBetween은 독점적이라는 것을 명심하십시오.
Joaquín L. Robles

x.isBetween(moment(a).subtract(1, 'day'), b)트릭도하는 것 같습니다.
James Donnelly 2015 년

@ThisClark 좋은 해결 방법입니다. 더 적은 함수 호출을 가진 다른 하나를 제안 할 수 있습니다.!(x.isBefore(a) || x.isAfter(b))
tavnab 2015

무슨 exclusive뜻이야?
Batman

2
@Batman 1,2,3,4,5 목록을 고려하십시오. 배타적으로 1과 5는이 목록의 값 사이에 있지 않습니다. 포함하여 1과 5는이 목록의 값 사이에 있습니다. 왼쪽 포함 (오른쪽 독점과 동일)이 1이 포함되어 있지만 5. 마우스 오른쪽 버튼으로 포함 (왼쪽 독점과 동일)는 5가 포함되어 있지만 1
ThisClark


16

나는 그것을 믿는다

if (startDate <= date && date <= endDate) {
  alert("Yay");
} else {
  alert("Nay! :("); 
}

너무 작동합니다 ...


이 계산은 항상 연도를 무시합니다. 예를 들어, startDate = '05 -01-2019 ', endDate = '05 -31-2019', 날짜를 '05 -21-2017 '로 지정하면 false이지만 결과는 "Yay"로 표시됩니다. .
Aakash Maurya

1
@AakashMaurya 날짜가 아닌 문자열을 비교하고 있습니다. startDate / endDate를 startDate = new Date ( "05-01-2019")로 정의해야합니다.
Tiele Declercq

13

좋은 소식 여러분, isBetween기능이 있습니다! 라이브러리 업데이트;)

http://momentjs.com/docs/#/query/is-between/


2
사실이지만 isBetween포괄적이지 않음
Epoc

4
버전 2.13.0에는 독점 성이 도입되었습니다. [은 값이 포함되어 있음을 나타냅니다. A는 (배제를 나타내는 포괄 매개 변수가 사용되는 경우, 두 지표가 전달되어야한다..moment('2016-10-30').isBetween('2016-10-30', '2016-10-30', null, '[]'); //true
Ramratan 굽타

8

moment.isBetween 함수 (포괄 성)의 네 번째 매개 변수를 사용하십시오. 예:

var startDate = moment("15/02/2013", "DD/MM/YYYY");
var endDate = moment("20/02/2013", "DD/MM/YYYY");

var testDate = moment("15/02/2013", "DD/MM/YYYY");

testDate.isBetween(startDate, endDate, 'days', true); // will return true
testDate.isBetween(startDate, endDate, 'days', false); // will return false

5
if (date.isBefore(endDate) 
 && date.isAfter(startDate) 
 || (date.isSame(startDate) || date.isSame(endDate))

논리적으로 동일합니다

if (!(date.isBefore(startDate) || date.isAfter(endDate)))

몇 줄의 코드와 (경우에 따라) 메서드 호출을 절약 할 수 있습니다.

한두 번만 수행하려는 경우 전체 플러그인을 가져 오는 것보다 쉬울 수 있습니다.


1

순간 js의 문서에 따라,

Rob Dawson이 작성한 Precise Range 플러그인을 사용하여 날짜 / 시간 범위를 정확하고 사람이 읽을 수있는 표현으로 표시 할 수 있습니다. URL : http://codebox.org.uk/pages/moment-date-range-plugin

moment("2014-01-01 12:00:00").preciseDiff("2015-03-04 16:05:06");
// 1 year 2 months 3 days 4 hours 5 minutes 6 seconds

moment.preciseDiff("2014-01-01 12:00:00", "2014-04-20 12:00:00");
// 3 months 19 days
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.