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


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-그러면 재미있는 일이 벌어지고 있습니다! 값 확인 ab그들이있는 거 날짜 있는지 확인하십시오.
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.