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

เปรียบเทียบ DateTime ระหว่าง Python และ JavaScript

DateTime ใน JavaScript และ Python มีความแตกต่างสำคัญ 2 จุดที่ต้องระวังเมื่อส่งข้อมูลข้ามภาษา

1. ความแตกต่างของเดือน (Month Index)

JavaScript: เดือน 0-11 (มกราคม = 0, ธันวาคม = 11)

Python: เดือน 1-12 (มกราคม = 1, ธันวาคม = 12)

// JavaScript
new Date(2017, 11, 1)  // 1 ธันวาคม 2017 (เดือน 11 = ธันวาคม)

# Python
datetime(2017, 11, 1)  # 1 พฤศจิกายน 2017 (เดือน 11 = พฤศจิกายน)
ตัวอย่างจากบทความ: (2017, 11, 1) → Python: 1 พฤศจิกายน 2017 | JavaScript: 1 ธันวาคม 2017

2. ความแตกต่างของ Timezone Default

  • Python: Default เป็น UTC
  • JavaScript: Default เป็น Local Timezone ของผู้ใช้

วิธีจัดการให้เข้ากัน

ใน JavaScript: ใช้ Date.UTC()

// สร้าง timestamp แบบ UTC
var utcTimestamp = Date.UTC(2013, 7, 10); // 2013-08-10 00:00:00 UTC
// หมายเหตุ: เดือนยังคงเป็น 0-based (7 = สิงหาคม)

// สร้าง Date object แบบ UTC
var utcDate = new Date(Date.UTC(2013, 7, 10, 12, 30, 0));
// 2013-08-10T12:30:00.000Z

ใน Python: ใช้ timezone-aware datetime

from datetime import datetime, timezone

# UTC aware
dt_utc = datetime(2013, 8, 10, 12, 30, 0, tzinfo=timezone.utc)

# แปลงเป็น timestamp (เหมือน JS)
timestamp = dt_utc.timestamp()

รูปแบบมาตรฐานสำหรับสื่อสาร (ISO 8601)

ใช้สตริงมาตรฐาน ISO 8601 เพื่อหลีกเลี่ยงปัญหา:

// JavaScript → ISO String
var isoString = new Date().toISOString(); // "2024-01-15T10:30:00.000Z"

// Python ← Parse ISO String
from datetime import datetime
dt = datetime.fromisoformat(isoString.replace('Z', '+00:00'))

ตารางสรุปความแตกต่าง

คุณสมบัติJavaScriptPython
Month Range0-111-12
Default TimezoneLocalUTC (naive) / Aware
Timestamp UnitMillisecondsSeconds
ISO String.toISOString().isoformat()
Parse ISOnew Date(str)datetime.fromisoformat()

Best Practice

  1. ส่งข้อมูลเป็น ISO 8601 string (UTC)
  2. เก็บใน Database เป็น UTC
  3. แปลงเป็น Local Time แค่ตอนแสดงผล (Frontend)
  4. ใช้ Library: date-fns, dayjs (JS) / pendulum, arrow (Python)