두 날짜 사이에 몇 초가 걸립니까?


180

그래서 나는 두 날짜가 YYYY-MM-DD있고ZZZZ-NN-EE

그들 사이에 몇 초가 있는지 어떻게 알 수 있습니까?


173
나는 잡히지 않기 위해 날짜 사이에 적어도 30 분을 남기려고합니다.
— 돈 브랜슨

yyyy-MM-dd명확합니다 (년, 월, 일-모두 대문자가 아니라는 점에 유의하십시오). 그러나 ZZZZ-NN-EE는 그렇지 않습니다. 나는 (시간대, ???, 요일)로 해석합니다. 일주일입니까? 그렇다면, 그것은되었을 것 ww입니다. 그러나 여전히 우리는 차이를 계산하기 위해 연도도 필요합니다. 실제 샘플 값 중 일부를 줄 수 있습니까?
— BalusC

7
@BalusC : 나는 그가 두 번째 날짜 (Y-> Z, M-> N, D-> E)를 나타 내기 위해 다음 글자로 갔다고 생각합니다. startDate 및 endDate와 같은 변수 이름을 사용하는 것이 좋을 것입니다.
— Austin Salonen

아, 알겠습니다 이것은 실제로 훨씬 더 명확하게 요구되었을 수 있습니다.
— BalusC

답변:


242

YYYY & ZZZZ를 사용하여 연도를 의미하는 정수 값을 의미하고 MM & NN은 연도를 의미하는 정수 값을 의미하고 DD & EE는 월을 의미하는 정수 값으로 의미합니다.

var t1 = new Date(YYYY, MM, DD, 0, 0, 0, 0);
var t2 = new Date(ZZZZ, NN, EE, 0, 0, 0, 0);
var dif = t1.getTime() - t2.getTime();

var Seconds_from_T1_to_T2 = dif / 1000;
var Seconds_Between_Dates = Math.abs(Seconds_from_T1_to_T2);

향후 참조를위한 편리한 소스는 MDN 사이트입니다

또는 날짜가 자바 스크립트 형식으로 올 경우

var dif = Date.parse(MM + " " + DD + ", " + YYYY) - Date.parse(NN + " " + EE + ", " + ZZZZ);

그런 다음 그 값을 밀리 초의 차이로 사용할 수 있습니다 (두 예에서 dif는 동일한 의미를 가짐)


1
예제에 사용 된 패턴 만 그렇지 않습니다. 4 자리 연도는 소문자 yyyy, 2 자리 월은 대문자 MM, 2 자리 일은 소문자로 표시 dd됩니다.
— BalusC

1
마틴, 여기서 날짜 패턴을 사용하지 않은 인상이 있습니다. MM DD, YYYY 및 NN EE, ZZZZ는 실제로 Steven이 요청한 "예시 값"입니다. 즉, 그는 형식화를 위해 어떤 종류의 작업도 수행하지 않습니다.
— Wagner Silveira

나는 두 번째 예를 업데이트했는데, 이것이 모두가 혼란스러워하는 것입니다. 또한 그의 예제에서 주어진 값을 어떻게 정확하게 해석하고 있는지에 대해 약간의 설명을 추가했습니다.
— Martin

두 번째 변수를 호출해야합니다 t2.
— Kees C. Bakker

대부분의 경우 아마도 t1-t2가 아닌 t2-t1을 수행 할 것입니다
— UpTheCreek

83

그냥 빼기 :

var a = new Date();
alert("Wait a few seconds, then click OK");

var b = new Date();
var difference = (b - a) / 1000;

alert("You waited: " + difference + " seconds");

@ user3344977-그러면 재미있는 일이 벌어지고 있습니다! 값 확인 a및 b그들이있는 거 날짜 있는지 확인하십시오.
— Seth

@Seth 당신이 맞아서 내 의견을 삭제했습니다. 내 "날짜"중 하나는 실제로 문자열이었습니다. 이것은 완벽하게 작동합니다.
— user3344977

14

만약 당신의 날짜 중 하나 또는 둘 다가 미래에 있다면, 당신이 두 번째 정확도를 원한다면 당신이 SOL을 두려워합니다. UTC 시간은 약 6 개월 전까지 알려지지 않은 윤초를 가지고 있으므로, 그보다 더 긴 날짜는 몇 초가 지나서 부정확 할 수 있습니다 (실제로 사람들은 종종 컴퓨터를 업데이트하지 않기 때문에 앞으로 몇 초가 지나면 언제든지 찾을 수 있습니다).

이것은 날짜 / 시간 라이브러리 설계 이론과 그 이유에 대한 좋은 설명을 제공합니다. http://www.boost.org/doc/libs/1_41_0/doc/html/date_time/details.html#date_time.tradeoffs


7
윤초 문제를 언급 한 +1! 더 잘 알아야 할 사람들조차도 (POSIX위원회, 당신을보고 있습니다 ...)
— Jim Lewis

1
ECMA 표준이 윤초를 명시 적으로 무시한다는 점을 언급 할 가치가 있습니다 (예 : 과거 윤초) . 하루에 정확히 86,400,000 밀리 초가 있다고 가정합니다 .
— Sylvain Leroux

11

간단하게 할 수 있습니다.

var secondBetweenTwoDate = Math.abs((new Date().getTime() - oldDate.getTime()) / 1000);


4
var a = new Date("2010 jan 10"),
    b = new Date("2010 jan 9");

alert(
    a + "\n" + 
    b + "\n" +
    "Difference: " + ((+a - +b) / 1000)
);

0

쉬운 방법:

function diff_hours(dt2, dt1) 
 {

  var diff =(dt2.getTime() - dt1.getTime()) / 1000;
  diff /= (60 * 60);
  return Math.abs(Math.round(diff));

 }


function diff_minutes(dt2, dt1) 
 {

  var diff =(dt2.getTime() - dt1.getTime()) / 1000;
  diff /= (60);
  return Math.abs(Math.round(diff));

 }

function diff_seconds(dt2, dt1) 
 {

  var diff =(dt2.getTime() - dt1.getTime()) / 1000;
  return Math.abs(Math.round(diff));

 }

function diff_miliseconds(dt2, dt1) 
 {

  var diff =(dt2.getTime() - dt1.getTime());
  return Math.abs(Math.round(diff));

 }


dt1 = new Date(2014,10,2);
dt2 = new Date(2014,10,3);
console.log(diff_hours(dt1, dt2));


dt1 = new Date("October 13, 2014 08:11:00");
dt2 = new Date("October 14, 2014 11:13:00");
console.log(diff_hours(dt1, dt2));

console.log(diff_minutes(dt1, dt2));

console.log(diff_seconds(dt1, dt2));

console.log(diff_miliseconds(dt1, dt2));

-3

bash에서 :

bc <<< "$(date --date='1 week ago' +%s) - \
    $(date --date='Sun,  29 Feb 2004 16:21:42 -0800' +%s)"

bc 및 gnu 날짜가 설치되어 있어야합니다.


1
이것은 어떻게 관련이 있습니까?
— Dropout

-10

.Net은 수학을 위해 TimeSpan 클래스를 제공합니다.

var time1 = new Date(YYYY, MM, DD, 0, 0, 0, 0)
var time2 = new Date(ZZZZ, NN, EE, 0, 0, 0, 0)

Dim ts As TimeSpan = time2.Subtract(time1)

ts.TotalSeconds

@ Jeff, 당신은 포인트를 잃지 않도록이 답변을 삭제하고 싶을 수도 있습니다. Visual Basic 소스 코드가 아닌 JavaScript 소스 코드를 요청했습니다.
— MacGyver
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.