🕐
← กลับไปคู่มือ

การทำงานกับ Unix Timestamp ในภาษาโปรแกรม

· แท็ก: javascript, python, php, golang, programming, unix-timestamp, epoch, database

ทำไมต้องใช้ Unix Timestamp ในการเขียนโปรแกรม?

Unix timestamp เป็นสกุลเงินสากลของเวลาในซอฟต์แวร์ ทำให้การคำนวณวันที่เป็นเรื่องง่าย (เพียงบวกหรือลบวินาที) ขจัดความสับสนเรื่องเขตเวลา และซีเรียลไลซ์เป็น JSON ได้อย่างสะอาด ภาษาโปรแกรมทุกภาษามีฟังก์ชันที่ตรงไปตรงมาสำหรับการทำงานกับ timestamp แต่ API แตกต่างกันเล็กน้อย คู่มือนี้นำเสนอภาษาที่พบบ่อยที่สุดและแนวปฏิบัติที่ดีที่สุด

JavaScript (Browser และ Node.js)

JavaScript ใช้ มิลลิวินาที สำหรับออบเจ็กต์ Date ในขณะที่ระบบอื่นๆ ส่วนใหญ่ใช้วินาที นี่คือสาเหตุของบั๊กที่พบบ่อยที่สุด

การรับ Timestamp ปัจจุบัน

// มิลลิวินาทีนับตั้งแต่ epoch (JavaScript มาตรฐาน)
const nowMs = Date.now();         // 1785292800000

// วินาทีนับตั้งแต่ epoch (เพื่อความเข้ากันได้)
const nowSec = Math.floor(Date.now() / 1000);  // 1785292800

// ตัวจับเวลาความละเอียดสูงของ Node.js (ไมโครวินาที)
const hrTime = process.hrtime.bigint();

การแปลง Timestamp เป็น Date

// จากวินาที (API และฐานข้อมูลส่วนใหญ่)
const timestamp = 1785292800;
const date = new Date(timestamp * 1000);  // คูณด้วย 1000!

// จากมิลลิวินาที (รูปแบบดั้งเดิมของ JavaScript)
const dateFromMs = new Date(1785292800000);

// จัดรูปแบบผลลัพธ์
console.log(date.toISOString());
// ผลลัพธ์: 2026-07-19T00:00:00.000Z

console.log(date.toLocaleString("en-US", { timeZone: "America/New_York" }));
// ผลลัพธ์: 7/18/2026, 8:00:00 PM

การแยกวิเคราะห์สตริงวันที่เป็น Timestamp

// ใช้ Date.parse() (คืนค่าเป็นมิลลิวินาที)
const ms = Date.parse("2026-07-19T00:00:00Z");
const sec = ms / 1000;  // 1785292800

// ใช้ Date constructor
const ts = Math.floor(new Date("2026-07-19 UTC").getTime() / 1000);

คำเตือน: พฤติกรรมของ Date.parse() แตกต่างกันไปในแต่ละเบราว์เซอร์สำหรับสตริงวันที่ที่ไม่ได้มาตรฐาน การใช้รูปแบบ ISO 8601 พร้อมตัวระบุเขตเวลา (Z สำหรับ UTC) ปลอดภัยที่สุด

การทำงานกับเขตเวลาใน JavaScript

// จัดรูปแบบในเขตเวลาที่ระบุ
const date = new Date(1785292800 * 1000);
const options = {
  timeZone: "Asia/Tokyo",
  year: "numeric", month: "2-digit", day: "2-digit",
  hour: "2-digit", minute: "2-digit", second: "2-digit",
};
console.log(date.toLocaleString("ja-JP", options));
// ผลลัพธ์: 07/19/2026 09:00:00

สำหรับการทำงานกับเขตเวลาขั้นสูง แนะนำให้ใช้ Intl.DateTimeFormat API หรือไลบรารีเช่น date-fns-tz และ Luxon

Python

Python มีทั้งโมดูลระดับต่ำ (time) และระดับสูง (datetime) สำหรับการทำงานกับ timestamp

การรับ Timestamp ปัจจุบัน

import time

# วินาทีเป็น float (รวมมิลลิวินาทีเศษส่วน)
current = time.time()
# ตัวอย่าง: 1785292800.123456

# เป็นจำนวนเต็ม
current_int = int(time.time())

การแปลง Timestamp เป็น Datetime

from datetime import datetime

# UTC datetime (Python 3.x)
dt_utc = datetime.utcfromtimestamp(1785292800)

# Datetime ที่รับรู้เขตเวลา (Python 3.9+ พร้อม zoneinfo)
from zoneinfo import ZoneInfo
dt_tokyo = datetime.fromtimestamp(1785292800, tz=ZoneInfo("Asia/Tokyo"))

# สตริงที่จัดรูปแบบแล้ว
print(dt_utc.strftime("%Y-%m-%d %H:%M:%S"))
# ผลลัพธ์: 2026-07-19 00:00:00

การแยกวิเคราะห์สตริงวันที่เป็น Timestamp

import time
from datetime import datetime

# จากสตริงวันที่
dt = datetime.strptime("2026-07-19 00:00:00", "%Y-%m-%d %H:%M:%S")
timestamp = time.mktime(dt.timetuple())  # ถือว่าเป็นเวลาท้องถิ่น

# สำหรับข้อมูลนำเข้าแบบ UTC
from datetime import timezone
timestamp_utc = dt.replace(tzinfo=timezone.utc).timestamp()

การทำงานกับ Pandas (การวิเคราะห์ข้อมูล)

import pandas as pd

# แปลงคอลัมน์ของ Unix timestamp เป็น datetime
df["timestamp"] = pd.to_datetime(df["unix_seconds"], unit="s")

# แปลงเป็นหน่วยต่างๆ
df["datetime_ms"] = pd.to_datetime(df["unix_milliseconds"], unit="ms")

# ตั้งค่าเขตเวลา
df["timestamp_ny"] = df["timestamp"].dt.tz_localize("UTC").dt.tz_convert("America/New_York")

PHP

PHP มี API ที่ง่ายที่สุดสำหรับการดำเนินการกับ timestamp

การรับ Timestamp ปัจจุบัน

<?php
$now = time();           // จำนวนเต็ม: 1785292800
$nowMicro = microtime();  // สตริง: "0.12345600 1785292800"
$nowFloat = microtime(true);  // Float: 1785292800.1235

การแปลง Timestamp เป็น Date

<?php
echo date("Y-m-d H:i:s", 1785292800);
// ผลลัพธ์: 2026-07-19 00:00:00

// พร้อมเขตเวลา
$tz = new DateTimeZone("Europe/London");
$dt = new DateTime("@1785292800");
$dt->setTimezone($tz);
echo $dt->format("Y-m-d H:i:s");

Go

แพ็กเกจ time ของ Go ได้รับการออกแบบมาอย่างดีแต่ต้องการความเข้าใจที่ชัดเจนเกี่ยวกับชนิดข้อมูลที่เกี่ยวข้อง

การรับ Timestamp ปัจจุบัน

package main

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()
    sec := now.Unix()            // int64 วินาที
    milli := now.UnixMilli()     // int64 มิลลิวินาที
    nano := now.UnixNano()       // int64 นาโนวินาที
    fmt.Printf("Seconds: %d\n", sec)
}

การแปลง Timestamp เป็น Date

t := time.Unix(1785292800, 0)
fmt.Println(t.UTC())
// ผลลัพธ์: 2026-07-19 00:00:00 +0000 UTC

// จัดรูปแบบเป็นสตริง
fmt.Println(t.Format("2006-01-02 15:04:05"))
// ผลลัพธ์: 2026-07-19 00:00:00

// พร้อมเขตเวลา
loc, _ := time.LoadLocation("America/Chicago")
fmt.Println(t.In(loc))

Rust

use std::time::{SystemTime, UNIX_EPOCH};

// Timestamp ปัจจุบัน
let now = SystemTime::now()
    .duration_since(UNIX_EPOCH)
    .expect("Time went backwards");
println!("Seconds: {}", now.as_secs());

// Timestamp เป็น date
let dt = chrono::NaiveDateTime::from_timestamp_opt(1785292800, 0).unwrap();
println!("{}", dt.format("%Y-%m-%d %H:%M:%S"));

การจัดเก็บในฐานข้อมูล: แนวปฏิบัติที่ดีที่สุด

การเลือกชนิดคอลัมน์ที่เหมาะสม

| ฐานข้อมูล | ชนิดที่แนะนำ | หมายเหตุ | |----------|-----------------|-------| | PostgreSQL | TIMESTAMP WITH TIME ZONE หรือ BIGINT | แนะนำให้ใช้ชนิด timestamp ดั้งเดิม | | MySQL / MariaDB | INT UNSIGNED (สำหรับวันที่ถึงปี 2106) หรือ BIGINT | หลีกเลี่ยงชนิด TIMESTAMP (ช่วงสิ้นสุดที่ปี 2038) | | SQLite | INTEGER | SQLite ไม่มีชนิด timestamp ดั้งเดิม | | MongoDB | ออบเจ็กต์ Date หรือ int64 | BSON Date ภายในเป็น timestamp 64 บิต |

ตัวอย่าง PostgreSQL

-- จัดเก็บเป็น timestamp ดั้งเดิม
CREATE TABLE events (
    id SERIAL PRIMARY KEY,
    occurred_at TIMESTAMP WITH TIME ZONE NOT NULL,
    payload JSONB
);

-- แทรกด้วยเวลาปัจจุบัน
INSERT INTO events (occurred_at) VALUES (NOW());

-- คิวรีเป็น Unix timestamp
SELECT EXTRACT(EPOCH FROM occurred_at) AS unix_ts FROM events;

ตัวอย่าง MySQL

-- ใช้ BIGINT สำหรับการจัดเก็บที่รองรับอนาคต
CREATE TABLE logs (
    id INT AUTO_INCREMENT PRIMARY KEY,
    event_time BIGINT NOT NULL,
    message TEXT
);

-- แทรก timestamp ปัจจุบัน
INSERT INTO logs (event_time, message) VALUES (UNIX_TIMESTAMP(), 'Server started');

-- คิวรีและแปลง
SELECT FROM_UNIXTIME(event_time) AS readable_time FROM logs;

ตารางเปรียบเทียบภาษา

| ภาษา | Timestamp ปัจจุบัน | Timestamp เป็น Date | Date เป็น Timestamp | ความละเอียด | |----------|-------------------|-------------------|-------------------|------------| | JavaScript | Date.now() | new Date(ts * 1000) | Date.parse(str) / 1000 | มิลลิวินาที | | Python | time.time() | datetime.fromtimestamp(ts) | datetime.strptime(str).timestamp() | Float วินาที | | PHP | time() | date("Y-m-d", ts) | strtotime(str) | วินาที | | Go | time.Now().Unix() | time.Unix(ts, 0) | time.Parse(layout, str).Unix() | วินาที | | Rust | SystemTime::now() | NaiveDateTime::from_timestamp_opt() | — | หลากหลาย |

ไม่ว่าคุณจะใช้ภาษาใด Unix Timestamp Converter ของเราเป็นเพื่อนคู่ใจที่เชื่อถือได้สำหรับการตรวจสอบอย่างรวดเร็วและการดีบัก