การ Copy วันที่ด้วย Javascript

ฟังก์ชั่นเกี่ยวกับวันที่ของ Javascript ที่สำคัญก็คือ ฟังก์ชั่น Date ซึ่งให้ผลลัพท์กลับมาในรูปของ Object Date เช่น
var d = new Date(); // วันที่ปัจจุบัน
var c_date = d.getDate() + '-' + d.getMonth() + '-' + d.getFullYear(); // วันที่ เดือน คศ. ในรูปตัวเลข
alert(c_date);

แต่ก็มีบ่อยครั้งครับที่เราต้องการส่งค่าตัวแปรนี้ไปยังตัวแปรอื่นๆ อีกตัว เช่น
var d2 = d; // copy ไปยัง d2
d2.setDate(d2.getDate + 1); // เลื่อน d2 ไปอีก 1 วัน
var c_date = d.getDate() + '-' + d.getMonth() + '-' + d.getFullYear(); // ทดลองคืนค่าวันที่เดิม
alert(c_date);

จากโค้ดด้านบน ค่าของ d จะถูกเปลี่ยนไปตามค่าของ d2 ที่เปลี่ยน เนื่องจาก date เป็น Object ซึ่งการส่งถ่ายตัวแปร จะเป็นการส่งถ่าย Pointer อันจะเป็นการอ้างอิงไปยังตัวแปรเดิมเท่านั้น ดังนั้นเราจึงไม่สามารถส่งค่าของ Date ไปยังตัวแปรอื่นๆเหมือนการใช้ string ได้
หนทางแก้ไข สามารถทำได้โดยการสร้าง ตัวแปร Date ใหม่ขึ้นมา แล้วทำการสำเนาวันที่จากตัวแปรเดิมไปยังตัวแปรใหม่
var d2 = new Date(); // สร้าง d2 เป็น Object ใหม่
d2.setTime(d.valueOf()); // อ่านค่าจาก d ด้วย valueOf() ไปกำหนดให้ d2 ด้วย setTime()

เพียงแค่นี้ การเปลี่ยนแปลงใดๆ กับ d2 ก็จะไม่มีผลกระทบ กับ d แล้วครับ
ผู้เขียน goragod โพสต์เมื่อ 29 ส.ค. 2553 เปิดดู 5,515 ป้ายกำกับ Javascript
^