Programming

JavaScript에서 두 날짜의 차이가 있습니까?

procodes 2020. 2. 13. 00:58
반응형

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



반응형