ปรากฏว่าโค้ดส่วนที่มี bug คือคำสั่ง parseInt ครับ
function DMY2Date(dmyStr) {
var splitDateStr=dmyStr.split('/');
return new Date(splitDateStr[2],String(parseInt(splitDateStr[1])-1),splitDateStr[0]);
} //end function
คือผมสั่ง parseInt(splitDateStr[1]) เพื่อหาค่าเดือนเป็น Integer แต่ปรากฏว่า พอ split data string ออกมา มันได้ค่า "08" ซึ่งใน parseInt function มันมีเงื่อนไขว่าถ้าขึ้นต้นด้วย 0 แปลว่าเป็นเลขฐาน 8 ครับ พอลอง debug ดูปรากฏว่า parseInt("08") ได้ผลลัพธ์เป็น 0 เพราะเลขสูงสุดของเลขฐาน 8 คือ 7 ครับ ถ้า parseInt("010") ถึงจะได้ค่า 8
ลองดู Reference ที่ www.w3schools.com กันครับ
Syntax
parseInt(string, radix)
If the radix parameter is omitted, JavaScript assumes the following:
- If the string begins with "0x", the radix is 16 (hexadecimal)
- If the string begins with "0", the radix is 8 (octal). This feature is deprecated
- If the string begins with any other value, the radix is 10 (decimal)
ก็เลยไปแก้โดยกำหนด radix = 10 เข้าไปด้วย เพื่อบอกว่าเราต้องการ parseInt แบบเลขฐาน 10 ไม่ใช่เลขฐาน 8 นะเฟ้ย
function DMY2Date(dmyStr) {
var splitDateStr=dmyStr.split('/');
return new Date(splitDateStr[2],String(parseInt(splitDateStr[1],10)-1),splitDateStr[0]);
} //end function
เสร็จแล้วก็เลยต้องไปไล่นั่งตรวจสอบดูว่ามีการใช้ parseInt function ตรงไหนบ้าง เพื่อที่จะไปใส่ radix ให้หมดเพื่อป้องกันปัญหาครับ
๒ ความคิดเห็น:
ขอบพระคุณมากqครับ ขอบพระคุณอย่างที่สุด
ผมหาวิธีแก้แทบตาย แทบตายจริงๆครับ
อนุโมทนาในวิทยาทานครั้งนี้จริง
เรื่องเล็กๆที่ช่วยชีวิตผมไว้ครับ
ยินดีครับ
ถ้ามีคำถามด้าน .NET แนะนำ www.greatfriends.biz นะครับ มีคนเก่งๆช่วยตอบเยอะแยะเลยครับ
แสดงความคิดเห็น