รับความแตกต่างของเวลาระหว่างสองวันในไม่กี่วินาที


149

ฉันพยายามที่จะได้รับความแตกต่างระหว่างสองวันในไม่กี่วินาที ตรรกะจะเป็นเช่นนี้:

  • กำหนดวันเริ่มต้นซึ่งจะเป็นตอนนี้;
  • กำหนดวันสุดท้ายซึ่งจะเป็นวันเริ่มต้นบวกจำนวนวินาทีในอนาคต (สมมติว่า 15 ตัวอย่าง)
  • รับความแตกต่างระหว่างสองเหล่านี้ (จำนวนวินาที)

เหตุผลที่ฉันทำกับวันที่เป็นเพราะวันที่ / เวลาสุดท้ายขึ้นอยู่กับตัวแปรอื่น ๆ และมันก็ไม่เหมือนเดิม (ขึ้นอยู่กับว่าผู้ใช้ทำอะไรเร็ว) และฉันก็เก็บวันที่เริ่มต้นสำหรับสิ่งอื่น ๆ

ฉันพยายามทำสิ่งนี้:

var _initial = new Date(),
    _initial = _initial.setDate(_initial.getDate()),
    _final = new Date(_initial);
    _final = _final.setDate(_final.getDate() + 15 / 1000 * 60);

var dif = Math.round((_final - _initial) / (1000 * 60));

สิ่งที่ฉันไม่เคยได้รับความแตกต่างที่ถูกต้อง ฉันพยายามหารด้วย24 * 60ซึ่งจะทิ้งฉันไว้กับวินาที แต่ฉันไม่เคยทำให้ถูกต้อง แล้วมันมีอะไรผิดปกติกับตรรกะของฉัน? ฉันอาจทำผิดพลาดโง่ ๆ เพราะมันค่อนข้างช้า แต่มันทำให้ฉันรำคาญที่ฉันไม่สามารถทำงานได้ :)


2
ลำดับของการดำเนินการเป็นกุญแจสำคัญ
Dylan Cross

1
ดังนั้นคุณต้องการให้มีการประทับเวลาเพิ่ม 15 วินาทีจากนั้นดูความแตกต่างเป็นวินาที ฉันบอกได้ว่าอัตราต่อรองนั้นสูงมากซึ่งความแตกต่างจะเป็น .... รอให้มัน .... 15 วินาที?
adeneo

ดูเพิ่มเติมที่: stackoverflow.com/questions/13893754
Tomasz Nurkiewicz

1
ฉันเข้าใจจริง ๆ ว่าคุณกำลังพยายามทำอะไร (ฉันคิดว่า) แต่ถ้าคุณใช้วันที่ใหม่ () ซึ่งเป็นเวลายูนิกซ์ในขณะนี้เพิ่ม 15 วินาทีและตรวจสอบความแตกต่างทันทีความแตกต่างจะเป็น 15 วินาที (ลบด้วยมิลลิวินาทีที่ใช้ในการคำนวณ) แต่ฉันเดาว่าความตั้งใจของคุณคือการเปรียบเทียบสิ่งนี้ในอนาคต
adeneo

1
ฉันไม่ได้รับมันจะพิสูจน์จุดของฉันที่นี่เป็นที่ทำงานFIDDLEสำหรับตัวอย่างข้างต้นของคุณ หากคุณพยายามคิดว่าผู้ใช้ใช้เวลาทำอะไรคุณมักจะได้รับการประทับเวลาเมื่อผู้ใช้เริ่มการทำงานและการประทับเวลาเมื่อผู้ใช้เสร็จสิ้นการดำเนินการและเปรียบเทียบสิ่งเหล่านั้นและคุณรู้ว่าต้องใช้เวลานานเท่าใด . ห่าอะไรคือ 15 วินาทีสำหรับ?
adeneo

คำตอบ:


283

รหัส

var startDate = new Date();
// Do your operations
var endDate   = new Date();
var seconds = (endDate.getTime() - startDate.getTime()) / 1000;

หรือแม้แต่ง่ายขึ้น(endDate - startDate) / 1000ตามที่ระบุไว้ในความคิดเห็นเว้นแต่คุณจะใช้ typescript


คำอธิบาย

คุณจำเป็นต้องเรียกใช้getTime()เมธอดสำหรับDateวัตถุจากนั้นก็แค่ลบออกและหารด้วย 1,000 (เพราะมันมีหน่วยเป็นมิลลิวินาที) พิเศษเมื่อคุณเรียกใช้getDate()วิธีการคุณได้รับวันในเดือนเป็นจำนวนเต็มระหว่าง 1 และ 31 (ไม่เป็นศูนย์) เมื่อเทียบกับเวลาที่คุณจะได้รับจากgetTime()วิธีการโทรแสดงจำนวนมิลลิวินาทีตั้งแต่วันที่ 1 มกราคม 1970, 00:00


พูดจาโผงผาง

ขึ้นอยู่กับการดำเนินงานของคุณที่เกี่ยวข้องกับวันที่คุณอาจต้องการลงทุนในการรวมห้องสมุดเช่นdate.jsหรือmoment.jsซึ่งทำให้สิ่งต่างๆ ง่ายขึ้นสำหรับนักพัฒนา แต่นั่นเป็นเรื่องของการตั้งค่าส่วนตัว

ตัวอย่างเช่นในmoment.jsเราจะทำสิ่งmoment1.diff(moment2, "seconds")ที่สวยงาม


เอกสารที่มีประโยชน์สำหรับคำตอบนี้


14
ไม่จำเป็นต้องมีgetTIme , วันที่สามารถลบออกจากกันได้เนื่องจากผู้ดำเนินการ-จะบังคับพวกมันให้เป็นเบอร์
RobG

3
getTime เป็นสิ่งที่จำเป็นถ้าคุณใช้ typescript มันไม่อนุญาตให้มีการดำเนินการทางคณิตศาสตร์ระหว่างองค์ประกอบอื่น ๆ กว่าจำนวนใด ๆ หรือ enum
zaffaste

คุณสามารถใช้.valueOf()ซึ่งเป็นสิ่งที่ผู้-ประกอบการจะเรียกในกรณีใด ๆ ...
นอกรีตลิง

1
ถ้าเราต้องการความแตกต่างของเวลาชั่วโมง / นาทีเช่นกัน ... ? ฉันควรเบี่ยงเบนมันด้วย 60 หรือมากกว่านั้น ... @Juan
gumuruh

โปรดเพิ่มข้อสงสัยใหม่เป็นคำถามแต่ละข้อ แต่เนื่องจากคำถามนี้อาจถูกปิดซ้ำซ้อนลองดูที่นี่stackoverflow.com/questions/1322732/…
Juan Cortés

5

คุณสามารถใช้new Date().getTime()สำหรับรับการประทับเวลา จากนั้นคุณสามารถคำนวณความแตกต่างระหว่างที่สิ้นสุดและเริ่มต้นและในที่สุดก็เปลี่ยนการประทับเวลาซึ่งเป็นเข้าmss

const start = new Date().getTime();
const end = new Date().getTime();

const diff = end - start;
const seconds = Math.floor(diff / 1000 % 60);

4
<script type="text/javascript">
var _initial = '2015-05-21T10:17:28.593Z';
var fromTime = new Date(_initial);
var toTime = new Date();

var differenceTravel = toTime.getTime() - fromTime.getTime();
var seconds = Math.floor((differenceTravel) / (1000));
document.write('+ seconds +');
</script>

1

โค้ดด้านล่างจะให้เวลาต่างกันเป็นวินาที

var date1 = new Date(); // current date
var date2 = new Date("06/26/2018"); // mm/dd/yyyy format
var timeDiff = Math.abs(date2.getTime() - date1.getTime()); // in miliseconds
var timeDiffInSecond = Math.ceil(timeDiff / 1000); // in second

alert(timeDiffInSecond );

0

ลองใช้ฟังก์ชั่นเฉพาะจากภาษาการเขียนโปรแกรมระดับสูง JavaScript .getSeconds();เหมาะกับที่นี่:

var specifiedTime = new Date("November 02, 2017 06:00:00");
var specifiedTimeSeconds = specifiedTime.getSeconds(); 

var currentTime = new Date();
var currentTimeSeconds = currentTime.getSeconds(); 

alert(specifiedTimeSeconds-currentTimeSeconds);

0

ความแตกต่างของเวลาระหว่างปัจจุบันและ 10 นาทีหลังจากนั้นใช้ momentjs

let start_time = moment().format('YYYY-MM-DD HH:mm:ss');
let next_time = moment().add(10, 'm').format('YYYY-MM-DD HH:mm:ss');

let diff_milliseconds = Date.parse(next_time) - Date.parse(star_time);
let diff_seconds = diff_milliseconds * 1000;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.