Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

ฟังก์ชัน Date.parse() ใน JavaScript

Date.parse() คืออะไร

เมธอดสแตติก Date.parse() ใช้สำหรับ แปลงสตริงวันที่ (date string) เป็น timestamp คือ จำนวนมิลลิวินาทีตั้งแต่ 1 มกราคม 1970 00:00:00 UTC (Unix Epoch)

ฟังก์ชันนี้รับสตริงวันที่ในรูปแบบต่างๆ แล้วพยายาม parse (แยกวิเคราะห์) ออกเป็นองค์ประกอบของวันที่และเวลา จากนั้นคำนวณเป็น milliseconds นับจาก epoch

ไวยากรณ์ (Syntax)

Date.parse(dateString)
  • dateString - สตริงแทนวันที่/เวลา (รูปแบบที่รองรับดูด้านล่าง)

คืนค่า: จำนวนมิลลิวินาทีจาก epoch (Number) หรือ NaN หาก parse ไม่ได้

รูปแบบวันที่ที่รองรับ (Supported Formats)

ตัวอย่างการใช้งาน

ตัวอย่างที่ 1: ISO 8601 Format (แนะนำให้ใช้)

// UTC (Z suffix)
console.log(Date.parse('2024-01-15T10:30:00Z')); 
// 1705314600000

// With timezone offset
console.log(Date.parse('2024-01-15T10:30:00+07:00')); 
// 1705289400000 (7 ชั่วโมงน้อยกว่า UTC)

// Date only (ถือเป็น UTC)
console.log(Date.parse('2024-01-15')); 
// 1705276800000

ตัวอย่างที่ 2: รูปแบบอื่นๆ

console.log(Date.parse('Mon, 15 Jan 2024 10:30:00 GMT')); // RFC 2822
console.log(Date.parse('January 15, 2024 10:30:00'));     // Long format
console.log(Date.parse('01/15/2024'));                    // US format (MM/DD/YYYY)
console.log(Date.parse('15 Jan 2024'));                   // Short format

ตัวอย่างที่ 3: การแปลงกลับเป็น Date Object

const timestamp = Date.parse('2024-01-15T10:30:00Z');
const date = new Date(timestamp);

console.log(date.toISOString());     // 2024-01-15T10:30:00.000Z
console.log(date.toLocaleString());  // ตาม locale ของระบบ
console.log(date.toString());        // Mon Jan 15 2024 17:30:00 GMT+0700

ตัวอย่างที่ 4: การคำนวณความแตกต่างของเวลา

const start = Date.parse('2024-01-01T00:00:00Z');
const end = Date.parse('2024-12-31T23:59:59Z');

const diffMs = end - start;
const diffDays = diffMs / (1000 * 60 * 60 * 24);

console.log(`ความแตกต่าง: ${diffDays} วัน`); // ~365.999 วัน

คำเตือนและข้อจำกัดสำคัญ

1. รูปแบบที่ไม่มาตรฐาน (Non-standard formats)

การ parse รูปแบบที่ไม่ใช่ ISO 8601 อาจให้ผลลัพธ์ต่างกันไปในแต่ละ browser/engine:

// อาจแตกต่างในแต่ละ browser
Date.parse('2024/01/15');      // บางตัว parse ได้ บางตัว NaN
Date.parse('15-01-2024');      // ambiguous: DD-MM หรือ MM-DD?
Date.parse('Jan 15 2024');     // อาจทำงานได้
Date.parse('2024年1月15日');     // ไม่รองรับ (NaN)

2. Two-digit Year Interpretation

// ปี 2 หลัก อาจตีความต่างกัน
Date.parse('01/15/24');  // บางตัวเป็น 2024 บางตัวเป็น 1924
Date.parse('01/15/70');  // มักเป็น 1970 (pivot year)

3. Timezone Handling

// ไม่มี timezone -> ถือเป็น local time (ในบาง engine) หรือ UTC (ใน ISO 8601 strict)
Date.parse('2024-01-15T10:30:00');     // Local time ในบาง browser
Date.parse('2024-01-15T10:30:00Z');    // UTC เสมอ (แนะนำ)
Date.parse('2024-01-15');              // UTC ตาม ISO 8601

Best Practices

  1. ใช้ ISO 8601 เสมอ - รูปแบบเดียวที่มีมาตรฐานชัดเจนและ consistent ทุก platform
  2. ระบุ Timezone เสมอ - ใช้ Z สำหรับ UTC หรือ +07:00 สำหรับ offset
  3. ตรวจสอบ NaN - ตรวจสอบผลลัพธ์ก่อนใช้งาน
  4. หลีกเลี่ยงการ parse สตริงจาก user input โดยตรง - ใช้ date picker หรือ library แทน

กรณีพิเศษและข้อผิดพลาด

  • คืนค่า NaN หาก parse ไม่ได้ (invalid date string)
  • ไม่โยน exception - ต้องตรวจสอบ isNaN(result) เอง
  • Leap seconds ไม่ได้รับการจัดการ (JavaScript ไม่รองรับ leap seconds)
  • Year range: ประมาณ ±100,000,000 วันจาก epoch (ประมาณ ปี ±273,970)
รูปแบบตัวอย่างหมายเหตุ
ISO 8601 (แนะนำ)"2024-01-15T10:30:00Z", "2024-01-15T10:30:00+07:00"มาตรฐาน สะดวกที่สุด
RFC 2822"Mon, 15 Jan 2024 10:30:00 GMT"Email/HTTP headers
Short date"2024-01-15", "01/15/2024"อาจแตกต่างตาม locale
Long date"January 15, 2024", "15 Jan 2024"ภาษาอังกฤษ
With time"Jan 15, 2024 10:30:00"เวลาท้องถิ่นหรือ UTC