ตัวแปลง Unix timestamp เป็นวันที่
แปลง Unix timestamp เป็นวันที่และเวลาที่อ่านได้ — หรือแปลงวันที่กลับเป็น Unix timestamp รองรับทั้งวินาทีและมิลลิวินาที
แชร์เครื่องมือนี้
ฝังลงในเว็บไซต์ของคุณ
เครื่องมือที่เกี่ยวข้อง
Unix timestamp คืออะไร
Unix timestamp หรือเรียกอีกชื่อว่า Unix time หรือ POSIX time คือจำนวนวินาทีที่ผ่านไปตั้งแต่ 1970-01-01 00:00:00 UTC ซึ่งเรียกว่า Unix epoch เป็นมาตรฐานที่ใช้กันอย่างแพร่หลายในการคำนวณ เพราะมันแทนจุดหนึ่งในเวลาด้วยตัวเลขเพียงตัวเดียว ทำให้เก็บ เปรียบเทียบ และคำนวณได้ง่ายดาย
JavaScript ทำงานภายในด้วยหน่วยมิลลิวินาที ดังนั้น Date.now() จึงส่งคืน Unix timestamp คูณด้วย 1000 API ฐานข้อมูล และระบบด้านหลังหลายตัวใช้หน่วยวินาทีแทน เครื่องมือนี้ยอมรับทั้งสองรูปแบบและตรวจจับโดยอัตโนมัติว่าเป็นวินาทีหรือมิลลิวินาทีตามขนาดของตัวเลขที่คุณป้อน
Unix timestamp ที่น่าสังเกต
| Timestamp | วันที่ (UTC) | หมายเหตุ |
|---|---|---|
0 | 1970-01-01 00:00:00 | Unix epoch |
1,000,000,000 | 2001-09-09 01:46:40 | 1 พันล้านวินาที |
2,000,000,000 | 2033-05-18 03:33:20 | 2 พันล้านวินาที |
2,147,483,647 | 2038-01-19 03:14:07 | ปัญหา Year 2038 (สูงสุดของ 32-bit) |
ทำไมถึงปี 1970
Unix epoch วันที่ 1 มกราคม 1970 ถูกเลือกจากอนุสัญญาและข้อจำกัดของการใช้งานจริง Unix ได้รับการพัฒนาในช่วงปลายทศวรรษ 1960 และต้นทศวรรษ 1970 ที่ Bell Labs ผู้พัฒนาต้องการวันที่เริ่มต้นที่เป็นเลขกลมและสัมพันธ์กับปัจจุบัน วันที่ 1 มกราคม 1970 เป็นวันที่ใกล้เคียงพอที่จะใช้งานได้จริงและไม่มีความหมายทางเทคนิคใด ๆ พิเศษ มันเป็นจุดอ้างอิงที่สะดวกเท่านั้น
ระบบอื่น ๆ มีวันที่เริ่มต้นแตกต่างกัน Windows FILETIME epoch คือ 1 มกราคม 1601 เวลา GPS เริ่มต้น 6 มกราคม 1980 NTP epoch คือ 1 มกราคม 1900 เมื่อแปลงระหว่างระบบ การรู้ว่า epoch ของแต่ละระบบคืออะไรถือเป็นสิ่งจำเป็น
วินาทีกับมิลลิวินาที
Unix timestamp เดิมมีหน่วยเป็นวินาที ภาษาและระบบส่วนใหญ่ฝั่งเซิร์ฟเวอร์ (Unix shell, time.time() ของ Python, time() ของ PHP, ฐานข้อมูลส่วนใหญ่) ใช้วินาที Date.now() และ new Date().getTime() ของ JavaScript ส่งคืนมิลลิวินาที ความไม่ตรงกันนี้เป็นสาเหตุของบัคทั่วไปเมื่อ frontend ของ JavaScript สื่อสารกับ API ฝั่งหลัง
Unix timestamp ในหน่วยวินาทีในปัจจุบันเป็นตัวเลข 10 หลัก (ประมาณ 1,700,000,000 ในปี 2023) timestamp ในหน่วยมิลลิวินาทีเป็นตัวเลข 13 หลัก เครื่องคิดเลขตรวจจับรูปแบบที่คุณป้อนจากจำนวนหลักและแปลงตามไป
ปัญหา Year 2038
ระบบที่เก็บ Unix timestamp เป็นจำนวนเต็มที่มีเครื่องหมาย 32-bit สามารถแทนวันที่ได้ถึง 2,147,483,647 วินาทีหลัง epoch ซึ่งคือ 03:14:07 UTC วันที่ 19 มกราคม 2038 หลังจากนั้น จำนวนเต็มที่มีเครื่องหมาย 32-bit จะล้น ทำให้กลายเป็นตัวเลขลบมากขึ้น แทนวันที่ในปี 1901
บางครั้งเรียกปัญหานี้ว่า "Y2K38" หรือ "Unix Millennium Bug" ระบบ 64-bit สมัยใหม่ไม่ได้รับผลกระทบ เพราะจำนวนเต็มที่มีเครื่องหมาย 64-bit สามารถแทน timestamp ได้นานประมาณ 292 พันล้านปี อย่างไรก็ตาม ระบบฝังตัว ฐานข้อมูลเก่า และซอฟต์แวร์ 32-bit ที่เก่าแก่อาจยังคงมีความเสี่ยง อุตสาหกรรมหลายแห่ง รวมถึงโทรคมนาคม ธนาคาร และระบบควบคุมอุตสาหกรรม กำลังดำเนินการอพยพไปยังเวอร์ชันใหม่เพื่อแก้ไขปัญหานี้
วิธีรับ Unix timestamp ปัจจุบัน
| ภาษา / สภาพแวดล้อม | คำสั่ง |
|---|---|
| JavaScript | Math.floor(Date.now() / 1000) |
| Python | import time; int(time.time()) |
| PHP | time() |
| Bash | date +%s |
| SQL (PostgreSQL) | EXTRACT(EPOCH FROM NOW())::int |
| SQL (MySQL) | UNIX_TIMESTAMP() |
| Go | time.Now().Unix() |
| Rust | SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_secs() |
การใช้งานในความเป็นจริง
การพัฒนา API: REST APIs ใช้ Unix timestamp โดยทั่วไปสำหรับช่อง created_at, updated_at, และหมดอายุโทเค็น timestamp ไม่ขึ้นกับโซนเวลาและชัดเจน ไม่เหมือนสตริงวันที่ที่จัดรูปแบบซึ่งขึ้นกับภูมิภาคและอนุสัญญาการจัดรูปแบบ
หมดอายุโทเค็น: JWT (JSON Web Tokens) ใช้ Unix timestamp สำหรับคำขอ exp (หมดอายุ) และ iat (ออกให้เมื่อ) โทเค็นจะหมดอายุเมื่อ timestamp ปัจจุบันเกิน exp ค่า การคำนวณเวลาหมดอายุ — "โทเค็นนี้ควรหมดอายุใน 24 ชั่วโมง" — ต้องการบวก 86,400 วินาทีกับ timestamp ปัจจุบัน
TTL ของแคช: การหมดอายุของแคชมักจะกำหนดเป็น Unix timestamp หรือจำนวนวินาทีจากตอนนี้ การแก้ไขปัญหาแคชมักจำเป็นต้องแปลง timestamp หมดอายุที่เก็บไว้เป็นวันที่ที่อ่านได้
การวิเคราะห์ log: Server log มักจะมี Unix timestamp การแปลงไปเป็นวันที่ที่อ่านได้ถือเป็นขั้นตอนแรกในการเชื่อมโยง log entries กับเหตุการณ์จริง
เก็บข้อมูลในฐานข้อมูล: การเก็บ timestamp เป็นจำนวนเต็มแทนที่จะเป็นสตริงที่จัดรูปแบบหลีกเลี่ยงบัค การแปลงโซนเวลา และทำให้การเรียงลำดับ ค้นหาในช่วง และการคำนวณง่ายขึ้น query สำหรับ "บันทึกทั้งหมดจาก 7 วันที่ผ่านมา" กลายเป็น WHERE created_at > (NOW_UNIX - 604800)
คำถามที่พบบ่อย
Unix timestamp คืออะไร?
Unix timestamp คือจำนวนวินาทีที่ผ่านไปนับตั้งแต่วันที่ 1 มกราคม 1970 เวลา 00:00:00 UTC — จุดอ้างอิงที่เรียกว่า Unix epoch โดยแทนช่วงเวลาใดๆ ด้วยจำนวนเต็มเพียงค่าเดียว ทำให้จัดเก็บ เปรียบเทียบ และคำนวณได้ง่าย เป็นรูปแบบเวลามาตรฐานที่ใช้ในระบบปฏิบัติการ ฐานข้อมูล API และภาษาโปรแกรมส่วนใหญ่
ฉันจะแปลง Unix timestamp เป็นวันที่ได้อย่างไร?
ป้อน timestamp ลงในตัวแปลง แล้วระบบจะคืนค่าวันที่และเวลาใน UTC และโซนเวลาท้องถิ่นของคุณ เครื่องมือนี้ตรวจจับอัตโนมัติว่าคุณป้อนเป็นวินาที (ตัวเลข 10 หลัก) หรือมิลลิวินาที (ตัวเลข 13 หลัก) คุณยังสามารถแปลงกลับกันได้: เลือกวันที่และเวลาเพื่อให้ได้ Unix timestamp ที่สอดคล้องกัน
Unix time แบบวินาทีต่างจากแบบมิลลิวินาทีอย่างไร?
Unix timestamp แบบดั้งเดิมอยู่ในหน่วยวินาที ระบบฝั่งเซิร์ฟเวอร์ส่วนใหญ่ — PHP, Python, Go, Bash, ฐานข้อมูล SQL — ใช้วินาที ส่วน Date.now() และ new Date().getTime() ของ JavaScript จะคืนค่าเป็นมิลลิวินาที (วินาทีของ Unix × 1000) โดยปกติ timestamp แบบวินาทีมี 10 หลัก ส่วนแบบมิลลิวินาทีมี 13 หลัก การสับสนสองแบบนี้เป็นบั๊กที่พบบ่อยเมื่อ frontend JavaScript ส่ง timestamp ไปยัง backend ที่คาดหวังหน่วยวินาที
ทำไม Unix time ถึงเริ่มที่วันที่ 1 มกราคม 1970?
วันที่นี้ถูกเลือกโดยผู้พัฒนา Unix ที่ Bell Labs ในช่วงต้นทศวรรษ 1970 เพราะเป็นจุดเริ่มต้นที่สะดวกและค่อนข้างใหม่ ไม่มีความหมายพิเศษนอกเหนือจากเป็นวันที่กลมๆ ใกล้ช่วงที่ระบบถูกพัฒนา ระบบอื่นๆ ใช้ epoch ต่างกัน: Windows FILETIME เริ่ม 1 มกราคม 1601; GPS time เริ่ม 6 มกราคม 1980; NTP เริ่ม 1 มกราคม 1900
ปัญหา Year 2038 คืออะไร?
ระบบที่เก็บ Unix timestamp เป็น signed 32-bit integer จะรองรับวันที่ได้ถึง 19 มกราคม 2038 (timestamp 2,147,483,647) หลังจากนั้นค่าจะล้น (overflow) กลายเป็นเลขติดลบขนาดใหญ่ซึ่งแทนวันที่ในปี 1901 ระบบ 64-bit รุ่นใหม่ไม่ได้รับผลกระทบ อย่างไรก็ตาม ระบบฝังตัวแบบเก่า ฐานข้อมูลรุ่นเก่า และซอฟต์แวร์ 32-bit อาจยังมีความเสี่ยงและต้องทำการย้ายระบบก่อนถึงวันดังกล่าว
ฉันจะได้ Unix timestamp ปัจจุบันในภาษาโปรแกรมของฉันได้อย่างไร?
JavaScript: Math.floor(Date.now() / 1000). Python: import time; int(time.time()). PHP: time(). Bash: date +%s. PostgreSQL: EXTRACT(EPOCH FROM NOW())::int. MySQL: UNIX_TIMESTAMP(). Go: time.Now().Unix(). ทั้งหมดนี้จะคืนค่าเวลาปัจจุบันเป็นวินาทีที่ผ่านไปตั้งแต่ Unix epoch
