JavaScript에서 두 날짜의 차이를 어떻게 알 수 있나요?
-
09-06-2019 - |
문제
저는 시간 프레임으로 이벤트를 정의할 수 있는 애플리케이션을 만들고 있습니다.사용자가 시작일을 선택하거나 변경할 때 종료일을 자동으로 입력하고 싶습니다.그러나 두 시간의 차이를 구하는 방법과 그 차이를 사용하여 새로운 종료 날짜를 만드는 방법을 잘 모르겠습니다.
해결책
JavaScript에서는 다음을 호출하여 날짜를 epoc 이후의 밀리초 수로 변환할 수 있습니다. getTime()
방법 또는 숫자 표현식에 날짜를 사용하는 것뿐입니다.
따라서 차이를 얻으려면 두 날짜를 빼면 됩니다.
차이를 기반으로 새 날짜를 생성하려면 생성자에 밀리초 수를 전달하면 됩니다.
var oldBegin = ...
var oldEnd = ...
var newBegin = ...
var newEnd = new Date(newBegin + oldEnd - oldBegin);
이건 그냥 작동해야합니다
편집하다:@bdukes가 지적한 버그 수정
편집하다:
행동에 대한 설명을 위해, oldBegin
, oldEnd
, 그리고 newBegin
~이다 Date
인스턴스.교환원 호출 +
그리고 -
Javascript 자동 캐스팅을 실행하고 자동으로 valueOf()
해당 객체의 프로토타입 방법.그런 일이 발생합니다 valueOf()
메소드는 Date
전화로 이의를 제기하다 getTime()
.
그래서 기본적으로: date.getTime() === date.valueOf() === (0 + date) === (+date)
다른 팁
JavaScript는 기본적으로 날짜 차이를 완벽하게 지원합니다.
var msMinute = 60*1000,
msDay = 60*60*24*1000,
a = new Date(2012, 2, 12, 23, 59, 59),
b = new Date("2013 march 12");
console.log(Math.floor((b - a) / msDay) + ' full days between');
console.log(Math.floor(((b - a) % msDay) / msMinute) + ' full minutes between');
이제 몇 가지 함정이 있습니다.이 시도:
console.log(a - 10);
console.log(a + 10);
따라서 숫자와 날짜를 추가할 위험이 있는 경우 날짜를 다음으로 변환하세요. number
곧장.
console.log(a.getTime() - 10);
console.log(a.getTime() + 10);
내 첫 번째 예는 Date 개체의 강력함을 보여 주지만 실제로는 시한폭탄처럼 보입니다.
var date1 = new Date();
var date2 = new Date("2025/07/30 21:59:00");
//Customise date2 for your required future time
showDiff();
function showDiff(date1, date2){
var diff = (date2 - date1)/1000;
diff = Math.abs(Math.floor(diff));
var days = Math.floor(diff/(24*60*60));
var leftSec = diff - days * 24*60*60;
var hrs = Math.floor(leftSec/(60*60));
var leftSec = leftSec - hrs * 60*60;
var min = Math.floor(leftSec/(60));
var leftSec = leftSec - min * 60;
document.getElementById("showTime").innerHTML = "You have " + days + " days " + hrs + " hours " + min + " minutes and " + leftSec + " seconds before death.";
setTimeout(showDiff,1000);
}
HTML 코드의 경우:
<div id="showTime"></div>
시간 구성 요소에 신경 쓰지 않으면 다음을 사용할 수 있습니다. .getDate()
그리고 .setDate()
날짜 부분만 설정하면 됩니다.
종료일을 시작일로부터 2주 후로 설정하려면 다음과 같이 하세요.
function GetEndDate(startDate)
{
var endDate = new Date(startDate.getTime());
endDate.setDate(endDate.getDate()+14);
return endDate;
}
두 날짜 사이의 차이(일)를 반환하려면 다음을 수행하십시오.
function GetDateDiff(startDate, endDate)
{
return endDate.getDate() - startDate.getDate();
}
마지막으로, 2nd에서 반환된 값을 매개변수로 사용할 수 있도록 첫 번째 함수를 수정해 보겠습니다.
function GetEndDate(startDate, days)
{
var endDate = new Date(startDate.getTime());
endDate.setDate(endDate.getDate() + days);
return endDate;
}
감사해요 @빈센트 로버트, 나는 결국 귀하의 기본 예를 사용하게 되었지만 실제로는 newBegin + oldEnd - oldBegin
.단순화된 최종 솔루션은 다음과 같습니다.
// don't update end date if there's already an end date but not an old start date
if (!oldEnd || oldBegin) {
var selectedDateSpan = 1800000; // 30 minutes
if (oldEnd) {
selectedDateSpan = oldEnd - oldBegin;
}
newEnd = new Date(newBegin.getTime() + selectedDateSpan));
}
필요에 따라 이 함수는 2일 간의 차이를 계산하고 결과를 소수점 일수로 반환합니다.
// This one returns a signed decimal. The sign indicates past or future.
this.getDateDiff = function(date1, date2) {
return (date1.getTime() - date2.getTime()) / (1000 * 60 * 60 * 24);
}
// This one always returns a positive decimal. (Suggested by Koen below)
this.getDateDiff = function(date1, date2) {
return Math.abs((date1.getTime() - date2.getTime()) / (1000 * 60 * 60 * 24));
}
moment.js를 사용하는 경우 한 줄의 코드로 날짜 차이를 제공하는 더 간단한 솔루션이 있습니다.
moment(endDate).diff(moment(beginDate), 'days');
자세한 내용은 다음에서 확인할 수 있습니다. moment.js 페이지
건배, 미구엘
function compare()
{
var end_actual_time = $('#date3').val();
start_actual_time = new Date();
end_actual_time = new Date(end_actual_time);
var diff = end_actual_time-start_actual_time;
var diffSeconds = diff/1000;
var HH = Math.floor(diffSeconds/3600);
var MM = Math.floor(diffSeconds%3600)/60;
var formatted = ((HH < 10)?("0" + HH):HH) + ":" + ((MM < 10)?("0" + MM):MM)
getTime(diffSeconds);
}
function getTime(seconds) {
var days = Math.floor(leftover / 86400);
//how many seconds are left
leftover = leftover - (days * 86400);
//how many full hours fits in the amount of leftover seconds
var hours = Math.floor(leftover / 3600);
//how many seconds are left
leftover = leftover - (hours * 3600);
//how many minutes fits in the amount of leftover seconds
var minutes = leftover / 60;
//how many seconds are left
//leftover = leftover - (minutes * 60);
alert(days + ':' + hours + ':' + minutes);
}
function checkdate() {
var indate = new Date()
indate.setDate(dat)
indate.setMonth(mon - 1)
indate.setFullYear(year)
var one_day = 1000 * 60 * 60 * 24
var diff = Math.ceil((indate.getTime() - now.getTime()) / (one_day))
var str = diff + " days are remaining.."
document.getElementById('print').innerHTML = str.fontcolor('blue')
}
대체 수정 확장 코드..
showDiff();
function showDiff(){
var date1 = new Date("2013/01/18 06:59:00");
var date2 = new Date();
//Customise date2 for your required future time
var diff = (date2 - date1)/1000;
var diff = Math.abs(Math.floor(diff));
var years = Math.floor(diff/(365*24*60*60));
var leftSec = diff - years * 365*24*60*60;
var month = Math.floor(leftSec/((365/12)*24*60*60));
var leftSec = leftSec - month * (365/12)*24*60*60;
var days = Math.floor(leftSec/(24*60*60));
var leftSec = leftSec - days * 24*60*60;
var hrs = Math.floor(leftSec/(60*60));
var leftSec = leftSec - hrs * 60*60;
var min = Math.floor(leftSec/(60));
var leftSec = leftSec - min * 60;
document.getElementById("showTime").innerHTML = "You have " + years + " years "+ month + " month " + days + " days " + hrs + " hours " + min + " minutes and " + leftSec + " seconds the life time has passed.";
setTimeout(showDiff,1000);
}
<html>
<head>
<script>
function dayDiff()
{
var start = document.getElementById("datepicker").value;
var end= document.getElementById("date_picker").value;
var oneDay = 24*60*60*1000;
var firstDate = new Date(start);
var secondDate = new Date(end);
var diffDays = Math.round(Math.abs((firstDate.getTime() - secondDate.getTime())/(oneDay)));
document.getElementById("leave").value =diffDays ;
}
</script>
</head>
<body>
<input type="text" name="datepicker"value=""/>
<input type="text" name="date_picker" onclick="function dayDiff()" value=""/>
<input type="text" name="leave" value=""/>
</body>
</html>
이 코드는 시작 날짜 및 종료 날짜 (자격 조달 날짜)를 입력 한 학습 기간을 채우고 1 년 미만의 기간이 1 년 미만인지 확인합니다. txtFromQualifDate
그리고 두 번째 txtQualifDate
그리고 세 번째 txtStudyYears
연도 수의 결과를 분수로 표시합니다.
function getStudyYears()
{
if(document.getElementById('txtFromQualifDate').value != '' && document.getElementById('txtQualifDate').value != '')
{
var d1 = document.getElementById('txtFromQualifDate').value;
var d2 = document.getElementById('txtQualifDate').value;
var one_day=1000*60*60*24;
var x = d1.split("/");
var y = d2.split("/");
var date1=new Date(x[2],(x[1]-1),x[0]);
var date2=new Date(y[2],(y[1]-1),y[0])
var dDays = (date2.getTime()-date1.getTime())/one_day;
if(dDays < 365)
{
alert("the date between start study and graduate must not be less than a year !");
document.getElementById('txtQualifDate').value = "";
document.getElementById('txtStudyYears').value = "";
return ;
}
var dMonths = Math.ceil(dDays / 30);
var dYears = Math.floor(dMonths /12) + "." + dMonths % 12;
document.getElementById('txtStudyYears').value = dYears;
}
}
Date 객체를 사용한 다음 getTime()
두 날짜 모두에 대한 함수는 1970년 1월 1일 이후의 해당 시간을 숫자 값으로 제공합니다.그런 다음 이 숫자의 차이를 얻을 수 있습니다.
그래도 도움이 되지 않으면 전체 문서를 확인하세요. http://www.w3schools.com/jsref/jsref_obj_date.asp
아래 코드는 오늘부터 미래 날짜까지 남은 일수를 반환합니다.
종속성: jQuery와 MomentJs.
var getDaysLeft = function (date) {
var today = new Date();
var daysLeftInMilliSec = Math.abs(new Date(moment(today).format('YYYY-MM-DD')) - new Date(date));
var daysLeft = daysLeftInMilliSec / (1000 * 60 * 60 * 24);
return daysLeft;
};
getDaysLeft('YYYY-MM-DD');
var getDaysLeft = function (date1, date2) {
var daysDiffInMilliSec = Math.abs(new Date(date1) - new Date(date2));
var daysLeft = daysDiffInMilliSec / (1000 * 60 * 60 * 24);
return daysLeft;
};
var date1='2018-05-18';
var date2='2018-05-25';
var dateDiff = getDaysLeft(date1, date2);
console.log(dateDiff);
이것이 내 시스템에서 수행한 작업입니다.
var startTime=("08:00:00").split(":");
var endTime=("16:00:00").split(":");
var HoursInMinutes=((parseInt(endTime[0])*60)+parseInt(endTime[1]))-((parseInt(startTime[0])*60)+parseInt(startTime[1]));
console.log(HoursInMinutes/60);