# strtotime

(PHP 4, PHP 5, PHP 7)

strtotime — 将任何字符串的日期时间描述解析为 Unix 时间戳

### 说明

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

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

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

### 参数

`time`

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

`now`

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

### 返回值

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

### 错误／异常

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

### 更新日志

版本 | 说明
--- | ---
5.3.0 | Prior to PHP 5.3.0, relative time formats supplied to the `time` argument of strtotime() such as this week, previous week, last week, and next week were interpreted to mean a 7 day period relative to the current date/time, rather than a week period of Monday through Sunday.
5.3.0 | 在 PHP 5.3.0 之前， 24:00 不是一个有效的格式，并且 strtotime() 会返回 `FALSE`。
5.2.7 | In 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_STRICT` 和 `E_NOTICE` 时区错误。
5.0.2 | 在 PHP 5 中到 5.0.2 之前，"now" 和其它相对时间从今天午夜起错误计算了。这和正确从当前时间起计算的其它版本不同。
5.0.0 | Microseconds began to be allowed, but they are ignored.

### 范例

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

Example #2 失败检查

    <?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);
    }
    ?>

### 注释

> Note:

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

> Note:

> 有效的时间戳通常从 Fri, 13 Dec 1901 20:45:54 GMT 到 Tue, 19 Jan 2038 03:14:07 GMT（对应于 32 位有符号整数的最小值和最大值）。

> PHP 5.1.0 之前，不是所有的平台都支持负的时间戳，那么日记范围就被限制为不能早于 Unix 纪元。这意味着在 1970 年 1 月 1 日之前的日期将不能用在 Windows，一些 Linux 版本，以及几个其它的操作系统中。

> 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.

> Note:

> 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. If, however, the year is given in a two digit format and the separator is a dash (-, the date string is parsed as y-m-d.

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

> Note:

> 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.

### 参见

- Date and Time Formats
- DateTime::createFromFormat() - 根据给定的格式解析日期时间字符串
- checkdate() - 验证一个格里高里日期
- strptime() - 解析由 strftime 生成的日期／时间