누군가가 JavaScript를 사용하여 과거보다 크거나 작거나 같지 않은 두 날짜 의 값을 비교하는 방법을 제안 할 수 있습니까 ? 텍스트 상자에서 값이 제공됩니다.
누군가가 JavaScript를 사용하여 과거보다 크거나 작거나 같지 않은 두 날짜 의 값을 비교하는 방법을 제안 할 수 있습니까 ? 텍스트 상자에서 값이 제공됩니다.
답변:
Date 객체는 다음 각 날짜에 대한 구조 하나를 사용하여 비교 - 당신이 원하는 것을 할 것입니다 >
, <
, <=
또는 >=
.
는 ==
, !=
, ===
, 및 !==
연산자를 사용하는 데 필요한 date.getTime()
같이
var d1 = new Date();
var d2 = new Date(d1);
var same = d1.getTime() === d2.getTime();
var notSame = d1.getTime() !== d2.getTime();
날짜 개체와 직접 동등성을 확인하는 것이 명확하지 않습니다.
var d1 = new Date();
var d2 = new Date(d1);
console.log(d1 == d2); // prints false (wrong!)
console.log(d1 === d2); // prints false (wrong!)
console.log(d1 != d2); // prints true (wrong!)
console.log(d1 !== d2); // prints true (wrong!)
console.log(d1.getTime() === d2.getTime()); // prints true (correct)
그러나 입력 유효성 검사 지옥에서 자신을 찾을 수 없도록 텍스트 상자 대신 드롭 다운 또는 유사한 제한된 형식의 날짜 항목을 사용하는 것이 좋습니다.
setHours(0,0,0,0)
이런 식으로 전화를 제안 합니다. 전화 할 필요가 없습니다 setMinutes()
. 또한 더 빠르게 실행됩니다.
toString()
두 날짜 모두에 방법을 사용 하고 ==
연산자 와 비교해 보지 않겠 습니까? 시간을 재설정하고 나중에 비교하는 것보다 훨씬 쉬운 것 같습니다. 이것에 대한 단점이 있습니까?
자바 스크립트에서 날짜를 비교하는 가장 쉬운 방법은 먼저 날짜를 Date 객체로 변환 한 다음이 날짜 객체를 비교하는 것입니다.
아래에는 세 가지 기능이있는 객체가 있습니다.
날짜 비교 (a, b)
숫자를 반환합니다 :
dates.inRange (d, 시작, 종료)
부울 또는 NaN을 반환합니다.
날짜. 변환
다른 함수에서 입력을 날짜 객체로 변환하는 데 사용됩니다. 입력은
.
// Source: http://stackoverflow.com/questions/497790
var dates = {
convert:function(d) {
// Converts the date in d to a date-object. The input can be:
// a date object: returned without modification
// an array : Interpreted as [year,month,day]. NOTE: month is 0-11.
// a number : Interpreted as number of milliseconds
// since 1 Jan 1970 (a timestamp)
// a string : Any format supported by the javascript engine, like
// "YYYY/MM/DD", "MM/DD/YYYY", "Jan 31 2009" etc.
// an object : Interpreted as an object with year, month and date
// attributes. **NOTE** month is 0-11.
return (
d.constructor === Date ? d :
d.constructor === Array ? new Date(d[0],d[1],d[2]) :
d.constructor === Number ? new Date(d) :
d.constructor === String ? new Date(d) :
typeof d === "object" ? new Date(d.year,d.month,d.date) :
NaN
);
},
compare:function(a,b) {
// Compare two dates (could be of any type supported by the convert
// function above) and returns:
// -1 : if a < b
// 0 : if a = b
// 1 : if a > b
// NaN : if a or b is an illegal date
// NOTE: The code inside isFinite does an assignment (=).
return (
isFinite(a=this.convert(a).valueOf()) &&
isFinite(b=this.convert(b).valueOf()) ?
(a>b)-(a<b) :
NaN
);
},
inRange:function(d,start,end) {
// Checks if date in d is between dates in start and end.
// Returns a boolean or NaN:
// true : if d is between start and end (inclusive)
// false : if d is before start or after end
// NaN : if one or more of the dates is illegal.
// NOTE: The code inside isFinite does an assignment (=).
return (
isFinite(d=this.convert(d).valueOf()) &&
isFinite(start=this.convert(start).valueOf()) &&
isFinite(end=this.convert(end).valueOf()) ?
start <= d && d <= end :
NaN
);
}
}
(a > b) - (a < b)
날짜 배열을 정렬하는 데 유용합니다
Array.prototype.sort
모든 값이 유효한 날짜이면 사용할 수 있습니다 . 잘못된 날짜가있을 수 있다면, 나는 같은 것을 사용하는 것이 좋습니다function ( a, b ) { a = a === undefined || a === null : NaN : a.valueOf( a ); b = a === undefined || b === null : NaN : a.valueOf( b ); return isFinite( a ) && isFinite( b ) ? ( a > b ) - ( a < b ) : NaN; }
return a - b
더 단순하고 전체 return 문을 대체합니다.
평소 <
와 >
같이 비교 하지만 접두사를 =
사용해야 +
합니다. 이렇게 :
var x = new Date('2013-05-23');
var y = new Date('2013-05-23');
// less than, greater than is fine:
x < y; => false
x > y; => false
x === y; => false, oops!
// anything involving '=' should use the '+' prefix
// it will then compare the dates' millisecond values
+x <= +y; => true
+x >= +y; => true
+x === +y; => true
도움이 되었기를 바랍니다!
x.getTime() === y.getTime()
방법은, 모두 읽고 매우 빠른 볼 jsperf
+
연산자는 숫자로 표현을 변환하려고 시도합니다. Date.valueOf()
는 변환에 사용됩니다 (와 동일한 것을 반환합니다 Date.getTime()
.
관계 연산자 <
<=
>
>=
를 사용하여 JavaScript 날짜를 비교할 수 있습니다.
var d1 = new Date(2013, 0, 1);
var d2 = new Date(2013, 0, 2);
d1 < d2; // true
d1 <= d2; // true
d1 > d2; // false
d1 >= d2; // false
그러나 항등 연산자 ==
!=
===
!==
는 다음과 같은 이유로 날짜 값을 비교하는 데 사용할 수 없습니다 .
- 엄격하거나 추상적 인 비교를 위해 두 개의 별개의 객체가 동일하지 않습니다.
- 피연산자가 동일한 객체를 참조하는 경우에만 객체를 비교하는 표현식이 참입니다.
다음 방법 중 하나를 사용하여 평등 날짜 값을 비교할 수 있습니다.
var d1 = new Date(2013, 0, 1);
var d2 = new Date(2013, 0, 1);
/*
* note: d1 == d2 returns false as described above
*/
d1.getTime() == d2.getTime(); // true
d1.valueOf() == d2.valueOf(); // true
Number(d1) == Number(d2); // true
+d1 == +d2; // true
모두 Date.getTime()
와 Date.valueOf()
1970 년 1 월 1 일 00:00 (UTC)부터 (밀리 초)을 반환합니다. Number
함수와 단항 +
연산자는 모두 valueOf()
뒤에서 메소드를 호출합니다 .
Thursday, 10 Aug 2017
비표준 형식이며 브라우저마다 다르게 구문 분석하거나 전혀 구문 분석하지 않을 수 있습니다. 에 대한 참고 사항을 참조하십시오 Date.parse
.
JavaScript에서 날짜 를 비교하는 것은 매우 쉽습니다 ... JavaScript에는 날짜에 대한 비교 시스템 이 내장 되어 있습니다 를 되어있어 비교하기가 쉽습니다 ...
두 날짜 값을 비교하려면 다음 단계를 따르십시오. 예를 들어 각각 날짜 값이있는 2 개의 입력이 있습니다. String
비교할 수 있습니다 ...
1. 입력에서 얻은 2 개의 문자열 값이 있으며 비교하려는 경우 다음과 같습니다.
var date1 = '01/12/2018';
var date2 = '12/12/2018';
2.Date Object
날짜 값으로 비교 해야 하므로 간단히 new Date()
설명하기 위해을 사용하여 날짜로 변환하면됩니다. 설명을 간단하게하기 위해 다시 할당하지만 원하는대로 할 수 있습니다.
date1 = new Date(date1);
date2 = new Date(date2);
3. 이제 단순히>
<
>=
<=
date1 > date2; //false
date1 < date2; //true
date1 >= date2; //false
date1 <= date2; //true
<
, >
, <=
, >=
) 날짜 개체는 유닉스 시대 (초)로 먼저 변환하고, 그것을 잘 작동되어 사용된다. 그러나 이것은 date1 == date2
실제로 오류가 값이 아닌 인스턴스 동일성을 검사 하는 위치 에서 수행하는 일반적인 실수로 이어질 수 있습니다 . 이를 방지 및 날짜 값의 평등을 확인하려면이 작동합니다 : date1.valueOf() == date2.valueOf()
, 또는 짧은date1+0 == date2+0
요일 만 비교 (시간 구성 요소 무시) :
Date.prototype.sameDay = function(d) {
return this.getFullYear() === d.getFullYear()
&& this.getDate() === d.getDate()
&& this.getMonth() === d.getMonth();
}
용법:
if(date1.sameDay(date2)) {
// highlight day on calendar or something else clever
}
어떤 형식입니까?
Javascript Date 객체 를 구성하는 경우 밀리 초 차이를 얻기 위해 빼기 만하면됩니다 (편집 : 또는 비교).
js>t1 = new Date()
Thu Jan 29 2009 14:19:28 GMT-0500 (Eastern Standard Time)
js>t2 = new Date()
Thu Jan 29 2009 14:19:31 GMT-0500 (Eastern Standard Time)
js>t2-t1
2672
js>t3 = new Date('2009 Jan 1')
Thu Jan 01 2009 00:00:00 GMT-0500 (Eastern Standard Time)
js>t1-t3
2470768442
js>t1>t3
true
==
위에 언급 된 비교 문제를 피하기 때문에 좋은 생각 입니다.
이 코드를 사용하면
var firstValue = "2012-05-12".split('-');
var secondValue = "2014-07-12".split('-');
var firstDate=new Date();
firstDate.setFullYear(firstValue[0],(firstValue[1] - 1 ),firstValue[2]);
var secondDate=new Date();
secondDate.setFullYear(secondValue[0],(secondValue[1] - 1 ),secondValue[2]);
if (firstDate > secondDate)
{
alert("First Date is greater than Second Date");
}
else
{
alert("Second Date is greater than First Date");
}
또한이 링크를 확인하십시오 http://www.w3schools.com/js/js_obj_date.asp
짧은 답변
다음은 from dateTime> to dateTime Demo가 작동 하는 경우 {boolean}을 반환하는 함수입니다.
var from = '08/19/2013 00:00'
var to = '08/12/2013 00:00 '
function isFromBiggerThanTo(dtmfrom, dtmto){
return new Date(dtmfrom).getTime() >= new Date(dtmto).getTime() ;
}
console.log(isFromBiggerThanTo(from, to)); //true
설명
var date_one = '2013-07-29 01:50:00',
date_two = '2013-07-29 02:50:00';
//getTime() returns the number of milliseconds since 01.01.1970.
var timeStamp_date_one = new Date(date_one).getTime() ; //1375077000000
console.log(typeof timeStamp_date_one);//number
var timeStamp_date_two = new Date(date_two).getTime() ;//1375080600000
console.log(typeof timeStamp_date_two);//number
이제 숫자 유형의 날짜 시간이 모두 있으므로 비교 작업과 비교할 수 있습니다
(>, <, =,! =, ==,! ==,> = AND <=)
그때
C#
사용자 정의 날짜 및 시간 형식 문자열에 익숙한 경우이 라이브러리는 정확히 동일한 작업을 수행하고 날짜 시간 문자열 또는 유닉스 형식으로 전달하는지 여부에 관계없이 날짜 및 시간 dtmFRM의 형식을 지정하는 데 도움이 됩니다.
용법
var myDateTime = new dtmFRM();
alert(myDateTime.ToString(1375077000000, "MM/dd/yyyy hh:mm:ss ampm"));
//07/29/2013 01:50:00 AM
alert(myDateTime.ToString(1375077000000,"the year is yyyy and the day is dddd"));
//this year is 2013 and the day is Monday
alert(myDateTime.ToString('1/21/2014', "this month is MMMM and the day is dd"));
//this month is january and the day is 21
라이브러리 js
파일 에서 작성된 이러한 형식 중 하나를 전달하기 만하면 됩니다.
var date = new Date(); // will give you todays date.
// following calls, will let you set new dates.
setDate()
setFullYear()
setHours()
setMilliseconds()
setMinutes()
setMonth()
setSeconds()
setTime()
var yesterday = new Date();
yesterday.setDate(...date info here);
if(date>yesterday) // will compare dates
많은 기존 옵션에 또 다른 가능성을 추가하기 위해 시도해 볼 수 있습니다.
if (date1.valueOf()==date2.valueOf()) .....
... 나에게 도움이되는 것 같습니다. 물론 두 날짜가 모두 정의되지 않았는지 확인해야합니다 ...
if ((date1?date1.valueOf():0)==(date2?date2.valueOf():0) .....
이런 식으로 우리는 둘 다 정의되지 않은 경우 긍정적 인 비교가 이루어 지도록 할 수 있습니다.
if ((date1?date1.valueOf():0)==(date2?date2.valueOf():-1) .....
... 평등하지 않은 것을 선호한다면.
Via Moment.js
JSfiddle : http://jsfiddle.net/guhokemk/1/
function compare(dateTimeA, dateTimeB) {
var momentA = moment(dateTimeA,"DD/MM/YYYY");
var momentB = moment(dateTimeB,"DD/MM/YYYY");
if (momentA > momentB) return 1;
else if (momentA < momentB) return -1;
else return 0;
}
alert(compare("11/07/2015", "10/07/2015"));
dateTimeA
보다 큰 경우 메소드는 1을 리턴합니다.dateTimeB
이 메서드는 dateTimeA
같으면 0을 반환합니다.dateTimeB
dateTimeA
이보다 작 으면 -1을 반환합니다.dateTimeB
Date
객체에 대한 날짜 비교를 수행하기 위해 Moment와 같은 외부 라이브러리를 사용할 필요가 없습니다 .
타임 존이되기 전에
자바 스크립트 날짜에는 시간대 개념 이 없습니다 . "현지"시간대의 문자열을주고받는 편리한 기능을 갖춘 순간 (에포크 이후의 틱)입니다. 날짜 객체를 사용하여 날짜로 작업하려는 경우 모든 사람이하는 것처럼 날짜가 해당 날짜의 시작 부분에 UTC 자정을 나타내기를 원합니다.이것은 생성의 계절이나 시간대에 관계없이 날짜로 작업 할 수있게하는 일반적이고 필요한 규칙입니다. 따라서 특히 자정 UTC Date 객체를 만들 때 시간대 개념을 관리하려면 매우주의해야합니다.
대부분의 경우, 날짜는 사용자의 시간대를 반영하기를 원할 것입니다. 오늘이 생일이라면 클릭하십시오 . NZ와 미국 사용자는 동시에 클릭하여 다른 날짜를 얻습니다. 이 경우, 이렇게하십시오 ...
// create a date (utc midnight) reflecting the value of myDate and the environment's timezone offset.
new Date(Date.UTC(myDate.getFullYear(),myDate.getMonth(), myDate.getDate()));
때로는 국제 비교가 지역 정확도보다 우월합니다. 이 경우, 이렇게하십시오 ...
// the date in London of a moment in time. Device timezone is ignored.
new Date(Date.UTC(myDate.getUTCYear(), myDate.getyUTCMonth(), myDate.getUTCDate()));
이제 다른 답변에서 제안하는 것처럼 날짜 개체를 직접 비교할 수 있습니다.
시간대를 만들 때주의를 기울인 후에는 문자열 표현으로 다시 변환 할 때 시간대를 유지해야합니다. 안전하게 사용할 수 있습니다 ...
toISOString()
getUTCxxx()
getTime() //returns a number with no time or timezone.
.toLocaleDateString("fr",{timezone:"UTC"}) // whatever locale you want, but ALWAYS UTC.
그리고 다른 모든 것을 특히 피하십시오.
getYear()
, getMonth()
,getDate()
두 날짜를 비교하기 위해 다음 사이트에서 date.js JavaScript 라이브러리를 사용할 수 있습니다 : https://code.google.com/archive/p/datejs/downloads
Date.compare( Date date1, Date date2 )
메소드를 사용하면 다음 결과를 의미 하는 숫자 를 반환합니다 .
-1 = date1이 date2보다 작습니다.
0 = 값이 같습니다.
1 = date1이 date2보다 큽니다.
Javascript에서 자유 텍스트로 날짜를 작성하려면 Date () 객체로 구문 분석해야합니다.
자유 텍스트를 사용하여 Date.parse ()를 사용하여 새 날짜로 변환하려고 시도 할 수 있지만 페이지를 제어 할 수 있다면 대신 HTML 선택 상자 또는 YUI 달력 컨트롤 또는 jQuery UI 와 같은 날짜 선택기를 사용하는 것이 좋습니다 날짜 선택기 .
다른 사람들이 지적한 것처럼 날짜가 있으면 간단한 산술을 사용하여 날짜를 빼고 숫자 (초)를 하루의 초 수 (60 * 60 *)로 나눠서 날짜 수로 다시 변환 할 수 있습니다. 24 = 86400).
var date_today=new Date();
var formated_date = formatDate(date_today);//Calling formatDate Function
var input_date="2015/04/22 11:12 AM";
var currentDateTime = new Date(Date.parse(formated_date));
var inputDateTime = new Date(Date.parse(input_date));
if (inputDateTime <= currentDateTime){
//Do something...
}
function formatDate(date) {
var hours = date.getHours();
var minutes = date.getMinutes();
var ampm = hours >= 12 ? 'PM' : 'AM';
hours = hours % 12;
hours = hours ? hours : 12; // the hour '0' should be '12'
hours = hours < 10 ? '0'+hours : hours ;
minutes = minutes < 10 ? '0'+minutes : minutes;
var strTime = hours+":"+minutes+ ' ' + ampm;
return date.getFullYear()+ "/" + ((date.getMonth()+1) < 10 ? "0"+(date.getMonth()+1) :
(date.getMonth()+1) ) + "/" + (date.getDate() < 10 ? "0"+date.getDate() :
date.getDate()) + " " + strTime;
}
"some"에 의해 게시 된 코드의 개선 된 버전
/* Compare the current date against another date.
*
* @param b {Date} the other date
* @returns -1 : if this < b
* 0 : if this === b
* 1 : if this > b
* NaN : if a or b is an illegal date
*/
Date.prototype.compare = function(b) {
if (b.constructor !== Date) {
throw "invalid_date";
}
return (isFinite(this.valueOf()) && isFinite(b.valueOf()) ?
(this>b)-(this<b) : NaN
);
};
용법:
var a = new Date(2011, 1-1, 1);
var b = new Date(2011, 1-1, 1);
var c = new Date(2011, 1-1, 31);
var d = new Date(2011, 1-1, 31);
assertEquals( 0, a.compare(b));
assertEquals( 0, b.compare(a));
assertEquals(-1, a.compare(c));
assertEquals( 1, c.compare(a));
다음이 날짜 형식 인 경우이 코드를 사용할 수 있습니다.
var first = '2012-11-21';
var second = '2012-11-03';
if(parseInt(first.replace(/-/g,""),10) > parseInt(second.replace(/-/g,""),10)){
//...
}
20121121
숫자가 큰지 여부를 확인합니다 20121103
.
first == second
또는 first < second
또는을 비교하십시오 first > second
. MM / DD / YY, DD / MM / YY, YY / DD / MM, DD / YY / MM 또는 MM / YY / DD와 비교할 때 ISO8601의 많은 아름다움 중 하나입니다.
나는 보통 데이터베이스 Dates
와 같이 저장 timestamps(Number)
합니다.
비교해야 할 때 해당 타임 스탬프 또는
Date Object로 변환 한 다음 > <
필요한 경우 비교 하십시오.
변수가 동일한 날짜 개체에 대한 참조가 아니면 == 또는 ===가 제대로 작동하지 않습니다.
해당 Date 객체를 먼저 timestamp (number)로 변환 한 다음 동일한 지 비교하십시오.
var timestamp_1970 = new Date(0).getTime(); // 1970-01-01 00:00:00
var timestamp = new Date().getTime(); // Current Timestamp
var timestamp = 0; // 1970-01-01 00:00:00
var DateObject = new Date(timestamp);
오늘 2020.02.27 MacOs High Sierra v10.13.6에서 Chrome v80.0, Safari v13.0.5 및 Firefox 73.0.1에서 선택한 솔루션의 테스트를 수행합니다.
d1==d2
(D) 및 d1===d2
(E)는 모든 브라우저에서 가장 빠릅니다.getTime
(A)가 valueOf
(B) 보다 빠릅니다 (둘 다 보통 빠름)아래는 성능 테스트에 사용 된 스 니펫 솔루션입니다. 당신은 여기 당신의 기계에서 테스트를 수행 할 수 있습니다
크롬에 대한 결과
d1==d2
또는 d1===d2
질문의 맥락에서 쓸모가 없다.
from_date ='10-07-2012';
to_date = '05-05-2012';
var fromdate = from_date.split('-');
from_date = new Date();
from_date.setFullYear(fromdate[2],fromdate[1]-1,fromdate[0]);
var todate = to_date.split('-');
to_date = new Date();
to_date.setFullYear(todate[2],todate[1]-1,todate[0]);
if (from_date > to_date )
{
alert("Invalid Date Range!\nStart Date cannot be after End Date!")
return false;
}
이 코드를 사용하여 javascript를 사용하여 날짜를 비교하십시오.
감사합니다 D.Jeeva
var curDate=new Date();
var startDate=document.forms[0].m_strStartDate;
var endDate=document.forms[0].m_strEndDate;
var startDateVal=startDate.value.split('-');
var endDateVal=endDate.value.split('-');
var firstDate=new Date();
firstDate.setFullYear(startDateVal[2], (startDateVal[1] - 1), startDateVal[0]);
var secondDate=new Date();
secondDate.setFullYear(endDateVal[2], (endDateVal[1] - 1), endDateVal[0]);
if(firstDate > curDate) {
alert("Start date cannot be greater than current date!");
return false;
}
if (firstDate > secondDate) {
alert("Start date cannot be greater!");
return false;
}
여기 내 프로젝트 중 하나에서 수행 한 작업이 있습니다.
function CompareDate(tform){
var startDate = new Date(document.getElementById("START_DATE").value.substring(0,10));
var endDate = new Date(document.getElementById("END_DATE").value.substring(0,10));
if(tform.START_DATE.value!=""){
var estStartDate = tform.START_DATE.value;
//format for Oracle
tform.START_DATE.value = estStartDate + " 00:00:00";
}
if(tform.END_DATE.value!=""){
var estEndDate = tform.END_DATE.value;
//format for Oracle
tform.END_DATE.value = estEndDate + " 00:00:00";
}
if(endDate <= startDate){
alert("End date cannot be smaller than or equal to Start date, please review you selection.");
tform.START_DATE.value = document.getElementById("START_DATE").value.substring(0,10);
tform.END_DATE.value = document.getElementById("END_DATE").value.substring(0,10);
return false;
}
}
onsubmit 양식에서 이것을 호출합니다. 도움이 되었기를 바랍니다.