strtotime

(PHP 4, PHP 5, PHP 7, PHP 8)

strtotime將任何字符串的日期時(shí)間描述解析為 Unix 時(shí)間戳

說(shuō)明

strtotime(string $datetime, int $now = time()): int

本函數(shù)預(yù)期接受一個(gè)包含美國(guó)英語(yǔ)日期格式的字符串并嘗試將其解析為 Unix 時(shí)間戳(自 January 1 1970 00:00:00 UTC 起的秒數(shù)),其值相對(duì)于 now 參數(shù)給出的時(shí)間,如果沒(méi)有提供 now 參數(shù)則用系統(tǒng)當(dāng)前時(shí)間。

警告

本函數(shù)返回的 Unix 時(shí)間戳不包含時(shí)區(qū)信息,為了實(shí)現(xiàn)對(duì) "日期/時(shí)間" 進(jìn)行計(jì)算,推薦使用功能更強(qiáng)大的 DateTimeImmutable 類。

本函數(shù)將使用 TZ 環(huán)境變量(如果有的話)來(lái)計(jì)算時(shí)間戳。自 PHP 5.1.0 起有更容易的方法來(lái)定義時(shí)區(qū)用于所有的日期/時(shí)間函數(shù)。此過(guò)程在 date_default_timezone_get() 函數(shù)頁(yè)面中有說(shuō)明。

參數(shù)

datetime

日期/時(shí)間字符串。正確格式的說(shuō)明詳見(jiàn) 日期與時(shí)間格式。

now

用來(lái)計(jì)算返回值的時(shí)間戳。

返回值

成功則返回時(shí)間戳,否則返回 false。在 PHP 5.1.0 之前本函數(shù)在失敗時(shí)返回 -1。

錯(cuò)誤/異常

在每次調(diào)用日期/時(shí)間函數(shù)時(shí),如果時(shí)區(qū)無(wú)效則會(huì)引發(fā) E_NOTICE 錯(cuò)誤。參見(jiàn) date_default_timezone_set()。

范例

示例 #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';

// PHP 5.1.0 之前的版本中和應(yīng)該改成和 -1 進(jìn)行比較
if (($timestamp strtotime($str)) === false) {
    echo 
"The string ($str) is bogus";
} else {
    echo 
"$str == " date('l dS of F Y h:i:s A'$timestamp);
}
?>

注釋

注意:

如果給定的年份是兩位數(shù)字的格式,則其值 0-69 表示 2000-2069,70-100 表示 1970-2000。 See the notes below for possible differences on 32bit systems (possible dates might end on 2038-01-19 03:14:07).

注意:

有效的時(shí)間戳通常從 Fri, 13 Dec 1901 20:45:54 UTC 到 Tue, 19 Jan 2038 03:14:07 UTC(對(duì)應(yīng)于 32 位有符號(hào)整數(shù)的最小值和最大值)。

PHP 5.1.0 之前,不是所有的平臺(tái)都支持負(fù)的時(shí)間戳,那么日記范圍就被限制為不能早于 Unix 紀(jì)元。這意味著在 1970 年 1 月 1 日之前的日期將不能用在 Windows,一些 Linux 版本,以及幾個(gè)其它的操作系統(tǒng)中。

在 64 位的 PHP 版本中,時(shí)間戳的有效范圍實(shí)際上是無(wú)限的,因?yàn)? 64 位可以覆蓋最多 2930 億年的范圍。

注意:

不同的分隔符,比如 m/d/yd-m-y 會(huì)影響到解析結(jié)果:若以反斜線 (/) 為分隔,將會(huì)做為美洲日期 m/d/y 來(lái)解析;而當(dāng)分隔符為短橫線 (-) 或點(diǎn) (.) 時(shí),則將做為歐洲日期 d-m-y 格式來(lái)解析。當(dāng)年份只有兩位數(shù)字,且分隔符為短橫線 (-時(shí),日期字符串將被解析為 y-m-d 格式。

為了避免潛在的歧義,最好使用 ISO 8601 標(biāo)準(zhǔn)格式 (YYYY-MM-DD) 或 DateTime::createFromFormat() 來(lái)表達(dá)。

注意:

不建議使用此函數(shù)對(duì)日期進(jìn)行數(shù)學(xué)運(yùn)算。在 PHP 5.3 及以后版本中,推薦使用 DateTime::add()DateTime::sub() 函數(shù),PHP 5.2 中可以使用 DateTime::modify()

參見(jiàn)