Epoch Time คืออะไรกันแน่?
ถ้าคุณเคยทำงานกับวันที่และเวลาในการเขียนโปรแกรม คุณคงเคยเจอ Unix timestamps แน่นอนครับ แต่มันคืออะไรกันแน่ และทำไมเราถึงใช้มันล่ะ?
Unix epoch time (เรียกอีกชื่อว่า Unix time, POSIX time หรือเรียกสั้นๆ ว่า "epoch") คือการแสดงช่วงเวลาหนึ่งในรูปแบบของจำนวนวินาทีที่ผ่านไปตั้งแต่ วันที่ 1 มกราคม 1970 เวลาเที่ยงคืน UTC (Universal Coordinated Time) ครับ ช่วงเวลาเฉพาะนี้เรียกว่า "the Unix epoch" หรือ "epoch zero"
ทำไมต้องเป็นวันที่ 1 มกราคม 1970?
วันที่นี้อาจดูเหมือนเลือกมาแบบสุ่มๆ แต่จริงๆ แล้วมันถูกเลือกตอนที่ Unix กำลังถูกพัฒนาในช่วงต้นทศวรรษ 1970 ที่ Bell Labs ครับ นักพัฒนาต้องการจุดเริ่มต้นที่สม่ำเสมอสำหรับระบบติดตามเวลาของพวกเขา และวันที่ 1 มกราคม 1970 ก็ใกล้เคียงกับช่วงเวลาที่พวกเขากำลังทำงานในโปรเจกต์นี้ และมันก็กลายเป็นมาตรฐานสากลมาตั้งแต่นั้นครับ
ทำความเข้าใจรูปแบบ
Unix timestamps มีหลายรูปแบบขึ้นอยู่กับความแม่นยำที่ต้องการครับ:
- วินาที (10 หลัก): รูปแบบมาตรฐาน เช่น
1728773400 - มิลลิวินาที (13 หลัก): สำหรับความแม่นยำมากขึ้น เช่น
1728773400000 - ไมโครวินาที (16 หลัก): สำหรับการจับเวลาที่แม่นยำสูงมาก เช่น
1728773400000000
ช่วงเวลาทั่วไปในหน่วยวินาที
การเข้าใจช่วงเวลาทั่วไปเหล่านี้จะช่วยให้คุณทำงานกับ timestamps ได้ง่ายขึ้นครับ:
| ช่วงเวลา | วินาที | การคำนวณแบบง่าย |
|---|---|---|
| 1 ชั่วโมง | 3,600 | 60 × 60 |
| 1 วัน | 86,400 | 24 × 3,600 |
| 1 สัปดาห์ | 604,800 | 7 × 86,400 |
| 1 เดือน (เฉลี่ย) | 2,629,743 | 30.44 × 86,400 |
| 1 ปี (เฉลี่ย) | 31,556,926 | 365.24 × 86,400 |
ปัญหาปี 2038 (Y2038)
นี่เป็นสิ่งสำคัญที่ควรรู้ครับ: หลายระบบเก็บ Unix timestamps เป็น 32-bit signed integer ซึ่งสร้างปัญหาคล้ายกับบั๊ก Y2K
32-bit signed integer สามารถนับได้แค่ถึง 2,147,483,647 วินาทีเท่านั้น พอเราถึง วันที่ 19 มกราคม 2038 เวลา 03:14:07 UTC ตัวนับนี้จะล้นและกลับมาเป็นเลขติดลบ ซึ่งอาจทำให้เกิดความล้มเหลวของระบบและบั๊กได้ครับ
การดึง Epoch Time ปัจจุบัน
ทุกภาษาโปรแกรมมีวิธีการดึง Unix timestamp ปัจจุบันที่แตกต่างกันครับ นี่คือวิธีที่พบบ่อยที่สุด:
Web Development
JavaScript
// ได้ timestamp เป็นมิลลิวินาที หารด้วย 1000 เพื่อได้วินาที
const timestamp = Math.floor(Date.now() / 1000);
// วิธีทางเลือก
const timestamp = Math.floor(new Date().getTime() / 1000);
PHP
// ง่ายและตรงไปตรงมา
$timestamp = time();
// ใช้ DateTime (ยืดหยุ่นกว่า)
$timestamp = (new DateTime())->getTimestamp();
Backend Languages
Python
import time
# ดึง timestamp ปัจจุบัน
timestamp = int(time.time())
# ใช้ datetime module
from datetime import datetime
timestamp = int(datetime.now().timestamp())
Java
// คืนค่าเป็นมิลลิวินาที หารด้วย 1000 เพื่อได้วินาที
long timestamp = System.currentTimeMillis() / 1000;
// ใช้ Instant (Java 8+)
long timestamp = Instant.now().getEpochSecond();
C#
// .NET Framework 4.6+ / .NET Core
long timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();
// เวอร์ชันเก่า
var epoch = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds;
Ruby
# ดึง timestamp ปัจจุบัน
timestamp = Time.now.to_i
# วิธีทางเลือก
timestamp = Time.new.to_i
Go
import "time"
// ดึง Unix timestamp ปัจจุบัน
timestamp := time.Now().Unix()
// สำหรับมิลลิวินาที
milliseconds := time.Now().UnixMilli()
Database Queries
MySQL
-- ดึง timestamp ปัจจุบัน
SELECT UNIX_TIMESTAMP();
-- ดึง timestamp จากวันที่เฉพาะ
SELECT UNIX_TIMESTAMP('2025-10-12 14:30:00');
PostgreSQL
-- ดึง timestamp ปัจจุบัน
SELECT EXTRACT(EPOCH FROM NOW());
-- จากวันที่เฉพาะ
SELECT EXTRACT(EPOCH FROM TIMESTAMP '2025-10-12 14:30:00');
SQLite
-- ดึง timestamp ปัจจุบัน
SELECT STRFTIME('%s', 'now');
-- จากวันที่เฉพาะ
SELECT STRFTIME('%s', '2025-10-12 14:30:00');
Command Line
Unix/Linux Shell
# ดึง timestamp ปัจจุบัน
date +%s
# แปลงวันที่เฉพาะเป็น timestamp
date +%s -d "2025-10-12 14:30:00"
# สำหรับเวลา UTC/GMT ใช้ -ud แทน -d
date +%s -ud "2025-10-12 14:30:00"
PowerShell
# ดึง timestamp ปัจจุบัน
[int][double]::Parse((Get-Date (Get-Date).ToUniversalTime() -UFormat %s))
แปลง Epoch เป็นวันที่ที่อ่านได้
เมื่อคุณมี Unix timestamp แล้ว คุณมักจะต้องแปลงมันกลับเป็นรูปแบบวันที่ที่อ่านได้ครับ:
JavaScript
// แปลง timestamp เป็น Date object
const date = new Date(timestamp * 1000); // คูณด้วย 1000 เพื่อได้มิลลิวินาที
// จัดรูปแบบ
console.log(date.toLocaleString()); // รูปแบบท้องถิ่น
console.log(date.toISOString()); // รูปแบบ ISO 8601
PHP
// จัดรูปแบบ timestamp
$date = date('Y-m-d H:i:s', $timestamp);
// รูปแบบ RFC 2822
$date = date('r', $timestamp);
// ใช้ DateTime
$date = (new DateTime())->setTimestamp($timestamp)->format('Y-m-d H:i:s');
Python
from datetime import datetime
# แปลงเป็น datetime object
dt = datetime.fromtimestamp(timestamp)
# จัดรูปแบบ
formatted = dt.strftime('%Y-%m-%d %H:%M:%S')
# สำหรับ UTC
dt_utc = datetime.utcfromtimestamp(timestamp)
MySQL
-- แปลง timestamp เป็น datetime
SELECT FROM_UNIXTIME(1728773400);
-- พร้อมรูปแบบกำหนดเอง
SELECT FROM_UNIXTIME(1728773400, '%Y-%m-%d %H:%i:%s');
แปลงวันที่ที่อ่านได้เป็น Epoch
การทำตรงข้ามก็สำคัญพอๆ กันครับ:
JavaScript
// แปลง date string เป็น timestamp
const timestamp = Math.floor(new Date('2025-10-12 14:30:00').getTime() / 1000);
// ใช้ Date.parse()
const timestamp = Math.floor(Date.parse('October 12, 2025') / 1000);
PHP
// แปลงข้อความวันที่ภาษาอังกฤษส่วนใหญ่
$timestamp = strtotime('15 November 2025');
$timestamp = strtotime('next Monday');
$timestamp = strtotime('+1 week');
// ใช้ DateTime
$timestamp = (new DateTime('2025-10-12 14:30:00'))->getTimestamp();
Python
from datetime import datetime
import time
# แปลง date string
dt = datetime.strptime('2025-10-12 14:30:00', '%Y-%m-%d %H:%M:%S')
timestamp = int(dt.timestamp())
# สำหรับ UTC
import calendar
timestamp = calendar.timegm(time.strptime('2025-10-12 14:30:00', '%Y-%m-%d %H:%M:%S'))
Best Practices
เมื่อทำงานกับ Unix timestamps ในแอปพลิเคชันของคุณครับ:
- ใช้ 64-bit integers เสมอ เพื่อหลีกเลี่ยงปัญหา Y2038
- เก็บ timestamps เป็น UTC ในฐานข้อมูล แปลงเป็นเวลาท้องถิ่นเฉพาะตอนแสดงผล
- ใช้ให้สม่ำเสมอ กับความแม่นยำ (วินาที vs มิลลิวินาที) ตลอดทั้งแอปพลิเคชัน
- เขียนเอกสารรูปแบบของคุณ – ระบุให้ชัดเจนว่าคุณใช้วินาทีหรือมิลลิวินาที
- พิจารณาใช้ timezone-aware libraries สำหรับการดำเนินการวันที่/เวลาที่ซับซ้อน
- อย่าเก็บเวลาท้องถิ่น เป็น timestamp โดยไม่มีข้อมูล timezone
สรุป
Unix timestamps เป็นแนวคิดพื้นฐานในการเขียนโปรแกรมที่นักพัฒนาทุกคนควรเข้าใจครับ มันให้วิธีที่ง่ายและเป็นสากลในการแสดงเวลาที่ใช้ได้กับทุกระบบและทุกภาษาโปรแกรม
ไม่ว่าคุณจะกำลังสร้างเว็บแอปพลิเคชัน ทำงานกับฐานข้อมูล หรือแค่ต้องการจัดตารางงาน การเข้าใจ epoch time จะทำให้ชีวิตคุณง่ายขึ้นมากครับ ลองใช้เครื่องมือ Unix Timestamp Converter ของเราเพื่อแปลงระหว่าง timestamps และวันที่ที่อ่านได้อย่างรวดเร็วครับ!