sourcecode

JavaScript에서 두 날짜의 차이를 알 수 있습니까?

copyscript 2022. 9. 15. 22:50
반응형

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(diffTime + " milliseconds");
console.log(diffDays + " days");

날짜를 따옴표로 묶어야 합니다.나머지 코드는 밀리초 단위의 시간 차이를 얻은 후 일수를 얻기 위해 나눕니다.날짜에는 mm/dd/yyy 형식이 필요합니다.

보다 정확한 솔루션

...날짜에는 시간대 정보가 포함되어 있기 때문에 다른 요일광 절약 조정이 있는 지역에 걸쳐 있을있습니다.

이 질문에 대한 이전 답변에서는 문제의 두 날짜가 여름 시간(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는 서머타임을 준수합니까?를 참조해 주십시오.

p.s. 이 답변에 대한 몇 가지 코멘트에 대해 논의한 후, DST 경계에 걸친 javascript 날짜의 문제를 이해하면 해결할 수 있는 방법은 여러 가지가 있을 것입니다.위에서 설명한 것은 심플한 (테스트 완료)솔루션입니다.두 개의 새로운 Date 객체를 인스턴스화하는 대신 간단한 산술/수학 기반 솔루션이 있는지 알고 싶습니다.그게 더 빠를 수도 있어요.

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 )

여러 가지 방법을 시도해보니 날짜 선택기를 사용하는 것이 가장 좋았지만, 날짜 형식이 자바스크립트에 문제를 일으킵니다.

여기 제 답이 있습니다. 바로 사용하실 수 있습니다.

<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>

a 바이올린은 여기서 데모를 볼 수 있습니다.

이것은 한 날짜를 다른 날짜에서 빼는 코드입니다.이 예에서는 날짜 개체가 아니면 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

반응형