strtotime

编辑

(PHP 4, PHP 5, PHP 7)

strtotime — 将任何英文文本的日期时间描述解析为 Unix 时间戳

PHP中文网词条详解说明

int strtotime ( string $time [, int $now = time() ] )

函数预期接受一个包含美国英语日期格式的字符串并尝试将其解析为 Unix 时间戳(自 January 1 1970 00:00:00 GMT 起的秒数),其值相对于 now 参数给出的时间,如果没有提供此参数则用系统当前时间。

函数将使用 TZ 环境变量(如果有的话)来计算时间戳。自 PHP 5.1.0 起有更容易的方法来定义时区用于所有的日期/时间函数。此过程在 date_default_timezone_get() 函数页面中有说明。 

PHP中文网词条详解参数

time

日期/时间字符串。正确格式的说明详见 日期与时间格式。

now

用来计算返回值的时间戳。

PHP中文网词条详解返回值

成功则返回时间戳,否则返回 FALSE。在 PHP 5.1.0 之前本函数在失败时返回 -1。 

PHP中文网词条详解错误/异常

在每 次调用日期/时间函数时,如果时区无效则会引发 E_NOTICE 错误,如果使用系统设定值或TZ环境变量,则会引发 E_STRICT 或 E_WARNING 消息。参见 date_default_timezone_set()。

PHP中文网词条详解更新日志

版本说明
5.3.0在 PHP 5.3.0 之前, 24:00 不是一个有效的格式,并且 strtotime() 会返回 FALSE
5.2.7In PHP 5 prior to 5.2.7, requesting a given occurrence of a        given weekday in a month where that weekday was the first day        of the month would incorrectly add one week to the returned        timestamp. This has been corrected in 5.2.7 and later        versions.
5.1.0失败时返回 FALSE,不再是 -1
5.1.0

现在发布 E_STRICTE_NOTICE时区错误。

5.0.2在 PHP 5 中到 5.0.2 之前,"now"  和其它相对时间从今天午夜起错误计算了。这和正确从当前时间起计算的其它版本不同。
5.0.0Microseconds began to be allowed, but they are ignored.
4.4.0在 PHP 4.4 之前,"next" 被错误计算为 +2。对此通常的解决方法是用 "+1"

PHP中文网词条详解范例

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";
?>

失败检查

<?php
$str = 'Not Good';
// previous to PHP 5.1.0 you would compare with -1, instead of false
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);
}
?>

PHP中文网词条详解注释

注:

1.如果给定的年份是两位数字的格式,则其值 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).

2.有效的时间戳通常从 Fri, 13 Dec 1901 20:45:54 GMT 到 Tue, 19 Jan 2038 03:14:07 GMT(对应于 32 位有符号整数的最小值和最大值)。不是所有的平台都支持负的时间戳,那么日记范围就被限制为不能早于 Unix 纪元。这意味着在 1970 年 1 月 1 日之前的日期将不能用在 Windows,一些 Linux 版本,以及几个其它的操作系统中。不过 PHP 5.1.0 及更新的版本克服了此限制。

For 64-bit versions of PHP, the valid range of a timestamp is effectively infinite, as 64 bits can represent approximately 293 billion years in either direction.

3.Dates in the m/d/y or d-m-y formats are disambiguated by looking at the separator between the various components: if the separator is a slash (/), then the American m/d/y is assumed; whereas if the separator is a dash (-) or a dot (.), then the European d-m-y format is assumed.

To avoid potential ambiguity, it's best to use ISO 8601 (YYYY-MM-DD) dates or DateTime::createFromFormat() when possible.

4.Using this function for mathematical operations is not advisable. It is better to use DateTime::add() and DateTime::sub() in PHP 5.3 and later, or DateTime::modify() in PHP 5.2. 

PHP中文网词条详解参见

参考资料
词条标签:
strtotime