使用兩個數字作為年份時要小心。我遇到過這種情況
<?php
echo strtotime('24.11.22');
echo date('d.m.Y H:i:s', 1669324282) . "\n\n";
// 但是
echo strtotime('24.11.2022');
echo date('d.m.Y H:i:s', 1669237200);
?>
輸出
1669324282
25.11.2022 00:11:22
1669237200
24.11.2022 00:00:00
(PHP 4, PHP 5, PHP 7, PHP 8)
strtotime — 將任何英文日期時間描述字串解析成 Unix 時間戳記
此函式預期接收一個包含英文日期格式的字串,並會嘗試將該格式解析為 Unix 時間戳記(自 1970 年 1 月 1 日 00:00:00 UTC 以來的秒數),參考 baseTimestamp
中給定的時間戳記,如果未提供 baseTimestamp
,則參考目前時間。日期字串解析的定義在 日期與時間格式 中,並且有一些需要注意的細節。強烈建議您仔細閱讀其中的完整說明。
此函式返回的 Unix 時間戳記不包含時區資訊。若要使用日期/時間資訊進行計算,您應該使用功能更強大的 DateTimeImmutable。
除非在參數中指定時區,否則此函式的每個參數都使用預設時區。除非有意為之,否則請注意不要在每個參數中使用不同的時區。有關定義預設時區的各種方法,請參閱 date_default_timezone_get()。
成功時返回時間戳記,否則返回 false
。
如果時區無效,每次呼叫日期/時間函式都會產生 E_WARNING
。另請參閱 date_default_timezone_set()
版本 | 說明 |
---|---|
8.0.0 |
baseTimestamp 現在可以為 null。 |
範例 #1 strtotime() 範例
<?php
echo strtotime("now"), "\n";
echo strtotime("10 September 2000"), "\n";
echo strtotime("+1 day"), "\n";
echo strtotime("+1 week"), "\n";
echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";
echo strtotime("next Thursday"), "\n";
echo strtotime("last Monday"), "\n";
?>
範例 #2 檢查失敗
<?php
$str = 'Not Good';
if (($timestamp = strtotime($str)) === false) {
echo "字串 ($str) 格式錯誤";
} else {
echo "$str == " . date('l dS \o\f F Y h:i:s A', $timestamp);
}
?>
備註:
此情況下的「相對」日期也意味著,如果日期/時間戳記的特定組成部分未提供,則會直接從
baseTimestamp
中取得。也就是說,如果在 2022 年 5 月 31 日執行strtotime('February')
,它會被解釋為2022 年 2 月 31 日
,這將溢出到3 月 3 日
的時間戳記。(在閏年中,它將是3 月 2 日
。)使用strtotime('1 February')
或strtotime('first day of February')
可以避免這個問題。
備註:
如果年份以兩位數字格式指定,則 00-69 的值會映射到 2000-2069,而 70-99 會映射到 1970-1999。有關 32 位元系統上可能存在的差異,請參閱以下注意事項(可能的日期可能會在 2038-01-19 03:14:07 結束)。
備註:
時間戳記的有效範圍通常是從世界協調時間 1901 年 12 月 13 日星期五 20:45:54 到 2038 年 1 月 19 日星期二 03:14:07。(這些日期對應於 32 位元有號整數的最小值和最大值。)
對於 64 位元版本的 PHP,時間戳記的有效範圍實際上是無限的,因為 64 位元可以表示前後大約 2930 億年。
備註:
不建議將此函數用於數學運算。最好使用 DateTime::add() 和 DateTime::sub()。
使用兩個數字作為年份時要小心。我遇到過這種情況
<?php
echo strtotime('24.11.22');
echo date('d.m.Y H:i:s', 1669324282) . "\n\n";
// 但是
echo strtotime('24.11.2022');
echo date('d.m.Y H:i:s', 1669237200);
?>
輸出
1669324282
25.11.2022 00:11:22
1669237200
24.11.2022 00:00:00
不知道為什麼,但是
<?php
echo strtotime("+2 hours"), "\n";
echo strtotime("+2 hrs"), "\n";
echo strtotime("+2 hourss"), "\n";
?>
分別返回 +2 小時、-2 小時、+8 小時。後兩者應該回傳錯誤。
請注意:在 31 號的前一個月,它會返回同一個月
<?php
echo date('m', strtotime('2023-05-30 -1 month')) ; //返回 04
echo date('m', strtotime('2023-05-31 -1 month')) ; //返回 05,而不是 04
?>
因此,不要使用它來操作結果的月份。
要得知上個月是哪個月的更好方法是
<?php
//假設今天是 2023-05-31...
$firstOfThisMonth = date('Y-m') . '-01'; //返回 2023-05-01
echo date('m', strtotime($firstOfThisMonth . ' -1 month')) ; //返回 04
?>
> 此函數返回的 Unix 時間戳記不包含時區資訊。為了使用日期/時間資訊進行計算,您應該使用功能更強大的 DateTimeImmutable。
重要 - 不包含
<?php
date_default_timezone_set('Europe/Berlin');
// .... 一大堆程式碼
echo $a = strtotime('yesterday 00:00');
// $a 中的時間會是 23:00:00,您可能沒有意識到這一點
// https://onlinephp.io/c/ef696
// 使用 DateTimeImmutable