development

두 날짜 사이의 일 수를 계산하는 방법은 무엇입니까?

big-blog 2020. 4. 1. 08:02
반응형

두 날짜 사이의 일 수를 계산하는 방법은 무엇입니까? [복제]


이 질문에는 이미 답변이 있습니다.

  1. '시작'과 '끝'날짜 사이의 일 수를 계산하고 있습니다. 예를 들어, 시작 날짜가 13/04/2010이고 종료 날짜가 15/04/2010 인 경우 결과는

  2. JavaScript를 사용하여 결과를 얻으려면 어떻게합니까?


const oneDay = 24 * 60 * 60 * 1000; // hours*minutes*seconds*milliseconds
const firstDate = new Date(2008, 1, 12);
const secondDate = new Date(2008, 1, 22);

const diffDays = Math.round(Math.abs((firstDate - secondDate) / oneDay));

이를 수행하는 함수는 다음과 같습니다.

function days_between(date1, date2) {

    // The number of milliseconds in one day
    const ONE_DAY = 1000 * 60 * 60 * 24;

    // Calculate the difference in milliseconds
    const differenceMs = Math.abs(date1 - date2);

    // Convert back to days and return
    return Math.round(differenceMs / ONE_DAY);

}

여기 내가 사용하는 것이 있습니다. 날짜를 빼면 일광 절약 시간제 (예 : 4 월 1 일 ~ 4 월 30 일 또는 10 월 1 일 ~ 10 월 31 일)에서는 작동하지 않습니다. 이렇게하면 하루 종일 시간을 절약하고 UTC를 사용하여 DST 문제를 제거 할 수 있습니다.

var nDays = (    Date.UTC(EndDate.getFullYear(), EndDate.getMonth(), EndDate.getDate()) -
                 Date.UTC(StartDate.getFullYear(), StartDate.getMonth(), StartDate.getDate())) / 86400000;

함수로서 :

function DaysBetween(StartDate, EndDate) {
  // The number of milliseconds in all UTC days (no DST)
  const oneDay = 1000 * 60 * 60 * 24;

  // A day in UTC always lasts 24 hours (unlike in other time formats)
  const start = Date.UTC(EndDate.getFullYear(), EndDate.getMonth(), EndDate.getDate());
  const end = Date.UTC(StartDate.getFullYear(), StartDate.getMonth(), StartDate.getDate());

  // so it's safe to divide by 24 hours
  return (start - end) / oneDay;
}

내 구현은 다음과 같습니다.

function daysBetween(one, another) {
  return Math.round(Math.abs((+one) - (+another))/8.64e7);
}

+<date>정수 표현에 대한 유형 강제 변환을 수행 하며 하루에 밀리 초 <date>.getTime()동일한 효과를 갖 8.64e7습니다.


일광 절약 시간제 차이를 허용하도록 조정되었습니다. 이 시도:

  function daysBetween(date1, date2) {

 // adjust diff for for daylight savings
 var hoursToAdjust = Math.abs(date1.getTimezoneOffset() /60) - Math.abs(date2.getTimezoneOffset() /60);
 // apply the tz offset
 date2.addHours(hoursToAdjust); 

    // The number of milliseconds in one day
    var ONE_DAY = 1000 * 60 * 60 * 24

    // Convert both dates to milliseconds
    var date1_ms = date1.getTime()
    var date2_ms = date2.getTime()

    // Calculate the difference in milliseconds
    var difference_ms = Math.abs(date1_ms - date2_ms)

    // Convert back to days and return
    return Math.round(difference_ms/ONE_DAY)

}

// you'll want this addHours function too 

Date.prototype.addHours= function(h){
    this.setHours(this.getHours()+h);
    return this;
}

나는 두 날짜의 차이를 계산하는 방법을 묻는 다른 게시물에 대해이 솔루션을 작성 했으므로 준비한 내용을 공유합니다.

// Here are the two dates to compare
var date1 = '2011-12-24';
var date2 = '2012-01-01';

// First we split the values to arrays date1[0] is the year, [1] the month and [2] the day
date1 = date1.split('-');
date2 = date2.split('-');

// Now we convert the array to a Date object, which has several helpful methods
date1 = new Date(date1[0], date1[1], date1[2]);
date2 = new Date(date2[0], date2[1], date2[2]);

// We use the getTime() method and get the unixtime (in milliseconds, but we want seconds, therefore we divide it through 1000)
date1_unixtime = parseInt(date1.getTime() / 1000);
date2_unixtime = parseInt(date2.getTime() / 1000);

// This is the calculated difference in seconds
var timeDifference = date2_unixtime - date1_unixtime;

// in Hours
var timeDifferenceInHours = timeDifference / 60 / 60;

// and finaly, in days :)
var timeDifferenceInDays = timeDifferenceInHours  / 24;

alert(timeDifferenceInDays);

코드의 일부 단계를 건너 뛸 수 있습니다. 이해하기 쉽도록 코드를 작성했습니다.

여기서 실행중인 예제를 찾을 수 있습니다 : http://jsfiddle.net/matKX/


내 작은 날짜 차이 계산기에서 :

var startDate = new Date(2000, 1-1, 1);  // 2000-01-01
var endDate =   new Date();              // Today

// Calculate the difference of two dates in total days
function diffDays(d1, d2)
{
  var ndays;
  var tv1 = d1.valueOf();  // msec since 1970
  var tv2 = d2.valueOf();

  ndays = (tv2 - tv1) / 1000 / 86400;
  ndays = Math.round(ndays - 0.5);
  return ndays;
}

그래서 당신은 전화 할 것입니다 :

var nDays = diffDays(startDate, endDate);

( http://david.tribble.com/src/javascript/jstimespan.html의 전체 소스 )

추가

다음 줄을 변경하면 코드를 개선 할 수 있습니다.

  var tv1 = d1.getTime();  // msec since 1970
  var tv2 = d2.getTime();

참고 URL : https://stackoverflow.com/questions/2627473/how-to-calculate-the-number-of-days-between-two-dates

반응형