กี่วินาทีระหว่างสองวัน


180

ดังนั้นฉันจึงมีสองวันYYYY-MM-DDและZZZZ-NN-EE

ฉันจะทราบได้อย่างไรว่ามีกี่วินาทีระหว่างกัน


173
ฉันพยายามออกอย่างน้อยครึ่งชั่วโมงระหว่างวันที่เพื่อไม่ให้ถูกจับ
Don Branson

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

และจากนั้นคุณสามารถใช้ค่านั้นเป็นความแตกต่างเป็นมิลลิวินาที (ต่างกันในตัวอย่างของฉันทั้งสองมีความหมายเหมือนกัน)


1
รูปแบบที่ใช้ในตัวอย่างเท่านั้นไม่ถูกต้อง ปี 4 หลักตั้งข้อสังเกตโดยพิมพ์เล็กyyyy, เดือน 2 หลักโดยตัวพิมพ์ใหญ่MMและ 2 ddหลักโดยวันพิมพ์เล็ก
BalusC

1
มาร์ตินฉันมีความประทับใจที่ไม่ได้ใช้รูปแบบวันที่ใด ๆ ที่นี่ MM DD, YYYY และ NN EE, ZZZZ เป็น "ค่าตัวอย่าง" ที่สตีเว่นถาม ดังนั้นในคำอื่น ๆ เขาไม่ได้ทำอะไรเพื่อจัดรูปแบบ
Wagner Silveira

ฉันได้อัปเดตตัวอย่างที่สองซึ่งเป็นสิ่งที่ฉันคิดว่าทุกคนสับสน ฉันยังได้เพิ่มความกระจ่างบางประการเกี่ยวกับวิธีที่ฉันตีความค่าที่ให้ไว้ในตัวอย่างของเขา
มาร์ติ

t2จำเป็นต้องมีตัวแปรที่สองของคุณจะถูกเรียกว่า
Kees C. Bakker

ในกรณีส่วนใหญ่คุณอาจจะทำ t2 - t1 ไม่ใช่ t1 - t2
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 คุณถูกต้องดังนั้นฉันจึงลบความคิดเห็นของฉัน .. หนึ่งใน "วันที่" ของฉันเป็นจริงสตริง มันทำงานได้อย่างสมบูรณ์แบบ
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);



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

ในทุบตี:

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

มันไม่จำเป็นต้องมีวันที่ bc และ gnu ติดตั้ง


1
สิ่งนี้เกี่ยวข้องกันอย่างไร
กลางคัน

-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

@ เจฟฟ์คุณอาจต้องการลบคำตอบนี้เพื่อไม่ให้เสียคะแนน พวกเขาถามหาซอร์สโค้ด JavaScript แทนที่จะเป็นซอร์สโค้ด Visual Basic
MacGyver
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.