เวลายุค Epoch: รากฐานของ Unix Timestamps ค่ะ

Epoch Time คืออะไรกันแน่?

ถ้าคุณเคยทำงานกับวันที่และเวลาในการเขียนโปรแกรม คุณคงเคยเจอ Unix timestamps แน่นอนครับ แต่มันคืออะไรกันแน่ และทำไมเราถึงใช้มันล่ะ?

Unix epoch time (เรียกอีกชื่อว่า Unix time, POSIX time หรือเรียกสั้นๆ ว่า "epoch") คือการแสดงช่วงเวลาหนึ่งในรูปแบบของจำนวนวินาทีที่ผ่านไปตั้งแต่ วันที่ 1 มกราคม 1970 เวลาเที่ยงคืน UTC (Universal Coordinated Time) ครับ ช่วงเวลาเฉพาะนี้เรียกว่า "the Unix epoch" หรือ "epoch zero"

ตัวอย่างง่ายๆ: ถ้า Unix timestamp ปัจจุบันคือ 1728773400 นั่นหมายความว่าผ่านไปแล้วทั้งหมด 1,728,773,400 วินาทีนับตั้งแต่เที่ยงคืนของวันที่ 1 มกราคม 1970 ครับ

ทำไมต้องเป็นวันที่ 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 ตัวนับนี้จะล้นและกลับมาเป็นเลขติดลบ ซึ่งอาจทำให้เกิดความล้มเหลวของระบบและบั๊กได้ครับ

สำคัญ: ระบบสมัยใหม่กำลังเปลี่ยนไปใช้ 64-bit timestamps ซึ่งจะไม่ล้นอีกเป็นเวลา 292 พันล้านปีครับ ดังนั้นต้องแน่ใจว่าแอปพลิเคชันของคุณใช้ 64-bit integers สำหรับการเก็บ timestamp นะครับ!

การดึง 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 และวันที่ที่อ่านได้อย่างรวดเร็วครับ!

ลองใช้เลยตอนนี้: ไปที่ เครื่องมือแปลง ของเราเพื่อฝึกทำงานกับ Unix timestamps แบบเรียลไทม์ครับ!