มีหลายสิ่งที่บ้าที่เกิดขึ้นกับวัตถุJS DATEที่แปลงสตริงตัวอย่างเช่นพิจารณาวันที่ต่อไปนี้ที่คุณให้ไว้
หมายเหตุ:ตัวอย่างต่อไปนี้อาจจะหรืออาจจะไม่ONE DAY OFFขึ้นอยู่กับคุณเขตเวลาและเวลาปัจจุบัน
new Date("2011-09-24"); // Year-Month-Day
// => Fri Sep 23 2011 17:00:00 GMT-0700 (MST) - ONE DAY OFF.
อย่างไรก็ตามหากเราจัดรูปแบบสตริงเป็นเดือนวันวัน ...
new Date("09-24-2011");
=> // Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.
อีกสิ่งหนึ่งที่แปลก
new Date("2011-09-24");
// => Fri Sep 23 2011 17:00:00 GMT-0700 (MST) - ONE DAY OFF AS BEFORE.
new Date("2011/09/24"); // change from "-" to "/".
=> // Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.
เราสามารถเปลี่ยนเครื่องหมายขีดคั่นในวันที่ของคุณ"2011-09-24"ได้อย่างง่ายดายเมื่อทำการนัดใหม่
new Date("2011-09-24".replace(/-/g, '\/')); // => "2011/09/24".
=> // Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.
ถ้าเรามีสตริงวันที่เช่น"2011-09-24T00: 00: 00"
new Date("2011-09-24T00:00:00");
// => Fri Sep 23 2011 17:00:00 GMT-0700 (MST) - ONE DAY OFF.
ตอนนี้เปลี่ยนเครื่องหมายขีดกลางเพื่อส่งต่อเครื่องหมายทับเหมือนเดิม เกิดอะไรขึ้น?
new Date("2011/09/24T00:00:00");
// => Invalid Date
ฉันมักจะต้องจัดการรูปแบบวันที่2011-09-24T00: 00: 00ดังนั้นนี่คือสิ่งที่ฉันทำ
new Date("2011-09-24T00:00:00".replace(/-/g, '\/').replace(/T.+/, ''));
// => Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.
UPDATE
หากคุณระบุอาร์กิวเมนต์แยกต่างหากกับตัวสร้าง Date คุณสามารถรับเอาท์พุทที่มีประโยชน์อื่น ๆ ตามที่อธิบายไว้ด้านล่าง
หมายเหตุ:อาร์กิวเมนต์สามารถเป็นชนิด Number หรือ String ฉันจะแสดงตัวอย่างที่มีค่าผสม
รับเดือนและวันแรกของปีที่กำหนด
new Date(2011, 0); // Normal behavior as months in this case are zero based.
=> // Sat Jan 01 2011 00:00:00 GMT-0700 (MST)
รับเดือนและวันสุดท้ายของปี
new Date((2011 + 1), 0, 0); // The second zero roles back one day into the previous month's last day.
=> // Sat Dec 31 2011 00:00:00 GMT-0700 (MST)
ตัวอย่างของ Number, อาร์กิวเมนต์ String โปรดทราบว่าเดือนนี้เป็นเดือนมีนาคมเพราะเป็นศูนย์ตามเดือนอีกครั้ง
new Date(2011, "02");
=> // Tue Mar 01 2011 00:00:00 GMT-0700 (MST)
ถ้าเราทำสิ่งเดียวกัน แต่มีศูนย์วันหนึ่งเราจะได้อะไรที่แตกต่างออกไป
new Date(2011, "02", 0); // again the zero roles back from March to the last day of February.
=> // Mon Feb 28 2011 00:00:00 GMT-0700 (MST)
การเพิ่มวันที่เป็นศูนย์ในอาร์กิวเมนต์ปีและเดือนใด ๆ จะได้รับวันสุดท้ายของเดือนก่อนหน้า หากคุณยังคงมีตัวเลขติดลบคุณสามารถย้อนกลับได้อีกวัน
new Date(2011, "02", -1);
=> // Sun Feb 27 2011 00:00:00 GMT-0700 (MST)