เพิ่ม 10 วินาทีในวันที่


253

ฉันจะเพิ่ม 10 วินาทีในวัตถุวันที่ของ JavaScript ได้อย่างไร

บางสิ่งเช่นนี้

var timeObject = new Date()     
var seconds = timeObject.getSeconds() + 10;
timeObject = timeObject + seconds;

4
หรือถ้าคุณต้องการที่จะทำมันผ่านตัวสร้าง - ใหม่วันที่ (ใหม่วันที่ (). getTime () + 10,000)
John Strickler

คำตอบ:


417

มีsetSecondsวิธีการเช่นกัน:

var t = new Date();
t.setSeconds(t.getSeconds() + 10);

สำหรับรายการฟังก์ชั่นอื่น ๆ คุณควรตรวจสอบ MDNDate


setSeconds จะจัดการกรณีที่ล้อมรอบอย่างถูกต้อง:

var d;
d = new Date('2014-01-01 10:11:55');
alert(d.getMinutes() + ':' + d.getSeconds()); //11:55
d.setSeconds(d.getSeconds() + 10);
alert(d.getMinutes() + ':0' + d.getSeconds()); //12:05


3
ระวังการติดตั้ง Nodejs ของฉันจะคืนค่า d.getSeconds () เป็นสตริง ฉันต้องเปลี่ยนสิ่งนี้เป็น (+ d.getSeconds ()) unary plus แปลงสตริงเป็นตัวเลข บางทีความชัดเจนมากขึ้นอาจเป็น 1 * d.getSeconds ()
tqwhite

1
@tqwhite typeof new Date().getSeconds()ส่งคืนเป็น'number'โหนดดังนั้นฉันคิดว่าคุณอาจมีปัญหาอื่น ๆ (ยกเว้นว่าคุณอยู่ในโหนดรุ่นเก่าหรือบางสิ่ง)
zzzzBov

2
ลองทำd.setSeconds(d.getSeconds() - 92);แล้วคุณจะได้ความแตกต่าง 2'32 "แทนที่จะเป็น 1'32" วิธีแก้ปัญหาด้วยnew Date(d.getTime() - 92*1000);งาน แต่!
Rafalon

1
การใช้พฤติกรรมที่ไม่มีเอกสาร (ชุด setSeconds (70) จะเพิ่มนาทีโดยหนึ่งและตั้งวินาทีเป็น 10) ดูเหมือนว่าการปฏิบัติที่ไม่ดีโดยทั่วไป คำตอบ (ปัจจุบันต่อไป) ชี้ไปที่ Date.getTime () + <จำนวนมิลลิวินาทีที่จะเพิ่ม> ดูเหมือนจะเป็นวิธีที่ตั้งใจและได้รับการสนับสนุนและจะชัดเจนต่อโปรแกรมเมอร์ส่วนใหญ่ที่มาจากภาษาต่าง ๆ โดยไม่มีความรู้สารานุกรม เอ็นจิ้น JavaScript เฉพาะ
Tom Dibble

1
ปัญหาที่อาจเกิดขึ้นกับประวัติศาสตร์โซนเวลาเห็นความคิดเห็นภายใต้ @ คำตอบของรอน: stackoverflow.com/a/17267937/198797 อาจไม่ใช่สถานการณ์ทั่วไป แต่เป็นปัญหาอย่างไรก็ตาม
tsemer

110
// let timeObject = new Date();
// let seconds = 10 * 1000; // 10000 milliseconds
timeObject = new Date(timeObject.getTime() + seconds);

33
... และเหตุผลที่คุณเพิ่ม 10,000 เป็นเพราะวันที่ Javascript ทำงานเป็นมิลลิวินาทีนั่นคือ 10000 = 10 * 1,000
psiphi75

1
และ + ก่อนเวลาอ็อบเจ็กเป็นสิ่งจำเป็นเพราะมันใช้เวลาอ็อบเจ็กต์เป็นตัวเลข timeObject.getTime () ในคำตอบของรอน
James

1
JavaScript น่ารังเกียจมาก APIs เริ่มต้นเหล่านี้มีความผิดพลาดเล็กน้อย
usr

63

เพียงเพื่อการแสดงที่บ้าคลั่งในหมู่พวกเรา

getTime

var d = new Date('2014-01-01 10:11:55');
d = new Date(d.getTime() + 10000);

5,196,949 Ops / วินาทีเร็วที่สุด


setSeconds

var d = new Date('2014-01-01 10:11:55');
d.setSeconds(d.getSeconds() + 10);

2,936,604 Ops / วินาทีช้ากว่า 43%


moment.js

var d = new moment('2014-01-01 10:11:55');
d = d.add(10, 'seconds');

22,549 Ops / วินาทีช้ากว่า 100%


ดังนั้นอาจเป็นมนุษย์ที่อ่านได้น้อย (ไม่เลว) แต่เป็นวิธีที่เร็วที่สุดที่จะไป :)

การทดสอบออนไลน์ jspref


3
ขอบคุณสำหรับรายละเอียดมีประโยชน์มาก :)
ดีน

58
const timeObject = new Date(); 
timeObject = new Date(timeObject.getTime() + 1000 * 10);
console.log(timeObject);

นอกจากนี้โปรดอ้างอิง: วิธีเพิ่ม 30 นาทีไปยังวัตถุวันที่ JavaScript?


7
จากคำตอบที่ผิดทั้งหมดนี่คือคำตอบที่ถูกต้อง
Cory Mawhorter

ใช่นี่คือคำตอบที่ถูกต้อง น่าเสียดายที่ Google อ้างถึงคำถามนี้หากค้นหา "วันที่เพิ่มจาวาสคริปต์ในวินาที" และคำตอบที่โหวตมากที่สุดนั้นผิด
Philipp Gächter

2
ใครช่วยอธิบายหน่อยได้ไหมว่าคำตอบที่เลือก (ปัจจุบันจาก @zzzzBov) ทำอะไรผิด มันใช้งานได้สำหรับฉัน
tsemer

1
@tsemer จากภาพรวมครั้งแรกฉันคิดว่าคำตอบของ zzzzBov ไม่ถูกต้องเพราะฉันไม่คิดว่ามันจะอัปเดตค่านาทีถ้ามันอยู่นอกช่วง แต่เนื่องจาก "ความท้าทาย" ของคุณฉันจึงตรวจสอบ MDN และยืนยันว่าคำตอบนั้นถูกต้องแน่นอน :)
Ron

1
@tsemer ลองใช้เว็บเบราว์เซอร์ที่รองรับ Historical TimeZones (เช่น Internet Explorer 11): ตั้งค่า TimeZone ของระบบเป็น "Asia / Yekaterinburg":var timestamp = Date.parse("2011-03-26T20:59:59.999Z"); var d = new Date(timestamp); d.setSeconds(d.getSeconds() + 10); console.log(d.getTime() - timestamp);
4esn0k




2

Date()วัตถุใน JavaScript ไม่ว่าสมาร์ทจริงๆ

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

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

var vTime = new Date();

var iSecondsToAdd = ( iSeconds + (iMinutes * 60) + (iHours * 3600) + (iDays * 86400) );

vTime.setSeconds(iSecondsToAdd);

นี่คือเอกสารเพิ่มเติมบางส่วนที่อาจช่วยให้ :


2
  1. คุณสามารถใช้setSecondsวิธีการโดยรับวินาทีจากวันนี้และเพียงเพิ่ม 10 วินาทีในนั้น

    var today = new Date();
    today.setSeconds(today.getSeconds() + 10);
  2. คุณสามารถเพิ่ม 10 * 1,000 มิลลิวินาทีในวันที่ใหม่:

    var today = new Date(); 
    today = new Date(today.getTime() + 1000*10);
  3. คุณสามารถใช้setTime:

    today.setTime(now.getTime() + 10000)

1

ลองด้วยวิธีนี้

Date.prototype.addSeconds = function(seconds) {
  var copiedDate = new Date(this.getTime());
  return new Date(copiedDate.getTime() + seconds * 1000);
}

เพียงแค่โทรและกำหนด new Date().addSeconds(10)

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