echo date("d"); // 月份中的第幾天 (01-31) -> 13
echo date("D"); // 週幾縮寫 (Mon-Sun) -> Fri
echo date("N"); // ISO-8601 週幾數字 (1-7) -> 5
echo date("l"); // 週幾完整名稱 -> Friday
echo date("n"); // 月份數字 (1-12) -> 5
echo date("L"); // 是否閏年 (1/0) -> 1
echo date("Y-m-d H:i:s"); // 完整格式 -> 2016-05-13 15:19:49
echo date("Y-m-d H:i:s", strtotime("-1 day")); // 昨天
echo date("Y-m-d H:i:s", strtotime("+1 day")); // 明天
echo date("Y-m-d H:i:s", strtotime("+1 week")); // 下週
echo date("Y-m-d H:i:s", strtotime("+1 month")); // 下個月
echo date("Y-m-d H:i:s", strtotime("next Monday")); // 下週一
echo date("Y-m-d H:i:s", strtotime("+1 week 2 day 2 hour")); // 組合相對時間
優勢:自然語言解析極其強大,支援相對時間、週期、組合表達式。
import java.util.Date;
import java.text.SimpleDateFormat;
Date date = new Date(); // 當前時間
long timestamp = date.getTime(); // 毫秒級時間戳
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formatted = sdf.format(date); // 2016-05-13 15:19:49
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.ZoneOffset;
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formatted = now.format(fmt);
// 時間戳互轉(秒級)
long epochSec = now.toEpochSecond(ZoneOffset.UTC);
LocalDateTime fromSec = LocalDateTime.ofEpochSecond(epochSec, 0, ZoneOffset.UTC);
| 功能 | PHP | Java (傳統) | Java 8+ |
|---|---|---|---|
| 取得當前時間 | time() / new DateTime() | new Date() | LocalDateTime.now() |
| 格式化輸出 | date("Y-m-d H:i:s") | SimpleDateFormat.format() | DateTimeFormatter.format() |
| 解析字串 | strtotime() / DateTime::createFromFormat() | SimpleDateFormat.parse() | LocalDateTime.parse() |
| 相對運算 | strtotime("+1 day") | Calendar.add() | plusDays(1) / minusHours(2) |
| 時間戳單位 | 秒 | 毫秒 | 秒/奈秒 |
| 執行緒安全 | 無狀態函式,安全 | SimpleDateFormat 非安全 | DateTimeFormatter 安全 |
DateTime 物件導向介面,避免 date() + strtotime() 混用造成時區混淆java.time,棄用 Date/Calendar/SimpleDateFormat2016-05-13T15:19:49+08:00)或 Unix 秒級時間戳TIMESTAMP 或 DATETIME,應用層統一轉 UTC 存儲