การกำหนดDateตัวแปรให้กับอีกตัวแปรหนึ่งจะเป็นการคัดลอกการอ้างอิงไปยังอินสแตนซ์เดียวกัน ซึ่งหมายความว่าการเปลี่ยนจะเปลี่ยนอีกอัน
ฉันจะโคลนหรือคัดลอกDateอินสแตนซ์จริงได้อย่างไร
การกำหนดDateตัวแปรให้กับอีกตัวแปรหนึ่งจะเป็นการคัดลอกการอ้างอิงไปยังอินสแตนซ์เดียวกัน ซึ่งหมายความว่าการเปลี่ยนจะเปลี่ยนอีกอัน
ฉันจะโคลนหรือคัดลอกDateอินสแตนซ์จริงได้อย่างไร
คำตอบ:
ใช้วิธีวันที่ของวัตถุgetTime()ซึ่งส่งกลับจำนวนมิลลิวินาทีตั้งแต่ 1 มกราคม 1970 00:00:00 ( เวลายุค ):
var date = new Date();
var copiedDate = new Date(date.getTime());
ใน Safari 4 คุณสามารถเขียน:
var date = new Date();
var copiedDate = new Date(date);
... แต่ฉันไม่แน่ใจว่ามันใช้งานได้ในเบราว์เซอร์อื่นหรือไม่ (ดูเหมือนว่าจะทำงานใน IE8)
Date.prototype.clone = function() { return new Date(this.getTime()); }; ซึ่งคุณสามารถใช้เป็นcopiedDate = date.clone();
copiedDate = new Date(date)วิธีการทำงานใน IE6 + ใน Firefox ทั้งสองตัวเลือกนั้นมีความเร็วเท่ากัน
new Date(date)เช่นเดียวกับnew Date(date.getTime())เพราะ JS จะพยายามโทรdate.valueOf()เมื่อต้องการตัวเลขและdate.valueOf()เหมือนกับdate.getTime()การอ้างอิงDate.valueOf Object.valueOf
new Date(date)ใช้new Date(date.getTime()หรือnew Date(date.valueOf)แทนเนื่องจากวิธีแรกอาจทำให้เกิดความแตกต่างระหว่างวันที่อย่างน้อย Firefox และ IE (ไม่ใช่ Chrome) ยกตัวอย่างเช่นการใช้toISOString()ในวันที่ทั้งสองใน Firefox สร้างและ"2015-04-21T04:56:42.000Z" "2015-04-21T04:56:42.337Z"
นี่เป็นวิธีที่สะอาดที่สุด
let dat = new Date()
let copyOf = new Date(dat.valueOf())
console.log(dat);
console.log(copyOf);
var orig = new Date();
var copy = new Date(+orig);
+นั้นทำอะไรกับใครนอกจากผู้เชี่ยวชาญของ JS
+เครื่องหมายเป็นผู้ดำเนินการ unaray ที่นี่ new Date( Number(orig)) มันหมายความว่า เพิ่มเติมได้ที่นี่: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/
ฉบับย่อ:
Date.prototype.clone = function () {
return new Date(this.getTime());
}
const cloneDate = d => new Date(d.getTime())นอกจากนี้ยังสั้น:
ฉันพบว่างานมอบหมายที่เรียบง่ายนี้ใช้งานได้:
dateOriginal = new Date();
cloneDate = new Date(dateOriginal);
แต่ฉันไม่รู้ว่า "ปลอดภัย" ยังไง ทดสอบสำเร็จใน IE7 และ Chrome 19
new Date(date)ใช้new Date(date.getTime()หรือnew Date(date.valueOf)แทนเนื่องจากวิธีแรกอาจทำให้เกิดความแตกต่างระหว่างวันที่อย่างน้อย Firefox และ IE (ไม่ใช่ Chrome) ยกตัวอย่างเช่นการใช้toISOString()ในวันที่ทั้งสองใน Firefox สร้างและ"2015-04-21T04:56:42.000Z" "2015-04-21T04:56:42.337Z"