JavaScript에서 두 날짜의 차이가 있습니까? [복제]
이 질문에는 이미 답변이 있습니다.
하루 종일 두 날짜의 차이를 얻으려면 어떻게해야합니까 (하루 중 일부는 원하지 않습니다)
var date1 = new Date('7/11/2010');
var date2 = new Date('12/12/2010');
var diffDays = date2.getDate() - date1.getDate();
alert(diffDays)
위의 시도했지만 작동하지 않았습니다.
const date1 = new Date('7/13/2010');
const date2 = new Date('12/15/2010');
const diffTime = Math.abs(date2 - date1);
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
console.log(diffDays);
날짜를 따옴표로 묶어야합니다. 나머지 코드는 밀리 초 단위의 시간 차이를 얻은 다음 일 수를 얻기 위해 나눕니다. 날짜는 mm / dd / yyyy 형식을 예상합니다.
더 정확한 해결책
... 날짜에는 자연스럽게 시간대 정보가 있으므로 다른 일광 절약 시간 제로 지역에 걸쳐있을 수 있습니다.
이 질문에 대한 이전 답변은 해당 두 날짜가 일광 절약 시간제 (DST) 변경에 해당하는 경우를 고려하지 않습니다. DST 변경이 발생한 날짜의 지속 시간은 밀리 초 (밀리 초 != 1000*60*60*24
)이므로 일반적인 계산에 실패합니다.
먼저 두 날짜를 UTC로 정규화 한 다음 두 UTC 날짜 간의 차이를 계산하여이 문제를 해결할 수 있습니다.
이제 솔루션을 다음과 같이 작성할 수 있습니다.
const _MS_PER_DAY = 1000 * 60 * 60 * 24;
// a and b are javascript Date objects
function dateDiffInDays(a, b) {
// Discard the time and time-zone information.
const utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());
const utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());
return Math.floor((utc2 - utc1) / _MS_PER_DAY);
}
// test it
const a = new Date("2017-01-01"),
b = new Date("2017-07-25"),
difference = dateDiffInDays(a, b);
UTC 시간이 DST를 관찰하지 않기 때문에 작동합니다. UTC가 일광 절약 시간을 준수합니까?를 참조하십시오 .
추신 :이 답변에 대한 의견 중 일부를 논의 한 후에 DST 경계에 걸쳐있는 자바 스크립트 날짜의 문제를 이해 한 후에는 그것을 해결할 수있는 한 가지 이상의 방법이있을 수 있습니다. 위에서 제공 한 것은 간단하고 테스트 된 솔루션입니다. 두 개의 새로운 Date 객체를 인스턴스화하지 않고 간단한 산술 / 수학 기반 솔루션이 있는지 알고 싶습니다. 잠재적으로 더 빠를 수 있습니다.
moment.js를 사용하는 솔루션은 다음과 같습니다 .
var a = moment('7/11/2010','M/D/YYYY');
var b = moment('12/12/2010','M/D/YYYY');
var diffDays = b.diff(a, 'days');
alert(diffDays);
원래 입력 값을 사용했지만 형식을 지정하지 않았으므로 첫 번째 값이 7 월 11 일이라고 가정했습니다. 11 월 7 일인 경우 형식을 D/M/YYYY
대신 조정하십시오 .
var date1 = new Date("7/11/2010");
var date2 = new Date("8/11/2010");
var diffDays = parseInt((date2 - date1) / (1000 * 60 * 60 * 24), 10);
alert(diffDays )
나는 많은 방법을 시도했지만 datepicker를 사용하는 것이 가장 좋지만 날짜 형식으로 인해 JavaScript에 문제가 발생한다는 것을 알았습니다.
그래서 여기 내 대답이 있으며 즉시 사용할 수 있습니다.
<input type="text" id="startdate">
<input type="text" id="enddate">
<input type="text" id="days">
<script src="https://code.jquery.com/jquery-1.8.3.js"></script>
<script src="https://code.jquery.com/ui/1.10.0/jquery-ui.js"></script>
<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/redmond/jquery-ui.css" />
<script>
$(document).ready(function() {
$( "#startdate,#enddate" ).datepicker({
changeMonth: true,
changeYear: true,
firstDay: 1,
dateFormat: 'dd/mm/yy',
})
$( "#startdate" ).datepicker({ dateFormat: 'dd-mm-yy' });
$( "#enddate" ).datepicker({ dateFormat: 'dd-mm-yy' });
$('#enddate').change(function() {
var start = $('#startdate').datepicker('getDate');
var end = $('#enddate').datepicker('getDate');
if (start<end) {
var days = (end - start)/1000/60/60/24;
$('#days').val(days);
}
else {
alert ("You cant come back before you have been!");
$('#startdate').val("");
$('#enddate').val("");
$('#days').val("");
}
}); //end change function
}); //end ready
</script>
바이올린은 여기에서 볼 수 있습니다 DEMO
이것은 한 날짜를 다른 날짜에서 빼는 코드입니다. 이 예제는 Date 객체가 아닌 한 getTime () 함수가 작동하지 않으므로 날짜를 객체로 변환합니다.
var dat1 = document.getElementById('inputDate').value;
var date1 = new Date(dat1)//converts string to date object
alert(date1);
var dat2 = document.getElementById('inputFinishDate').value;
var date2 = new Date(dat2)
alert(date2);
var oneDay = 24 * 60 * 60 * 1000; // hours*minutes*seconds*milliseconds
var diffDays = Math.abs((date1.getTime() - date2.getTime()) / (oneDay));
alert(diffDays);
참고 URL : https://stackoverflow.com/questions/3224834/get-difference-between-2-dates-in-javascript
'Programming' 카테고리의 다른 글
파일에서 중복 행을 찾고 각 행이 복제 된 횟수를 계산합니까? (0) | 2020.02.13 |
---|---|
기본적으로 MongoDB 셸에서 예쁜 인쇄 (0) | 2020.02.13 |
ViewPager 및 프래그먼트 — 프래그먼트의 상태를 저장하는 올바른 방법은 무엇입니까? (0) | 2020.02.13 |
목록 또는 데이터 프레임의 요소에 액세스하기위한 대괄호 []와 이중 대괄호 [[]]의 차이점 (0) | 2020.02.13 |
git가 추적중인 파일 목록을 표시하도록하려면 어떻게해야합니까? (0) | 2020.02.13 |