什么是 Unix 时间戳
简单地说,Unix 时间戳是一种将时间跟踪为运行总秒数的方法。这个计数从 1970 年 1 月 1 日 UTC 的 Unix 纪元开始。因此,Unix 时间戳只是特定日期和 Unix 纪元之间的秒数。还应该指出的是,无论您在地球上的哪个位置,这个时间点在技术上都不会改变。这对于计算机系统非常有用,用于在在线和客户端的动态和分布式应用程序中跟踪和分类过时的信息。许多网站管理员使用 Unix 时间戳的原因是它们可以一次代表所有时区。欲了解更多信息,请阅读Wikipedia article。
什么是strtotime(),它有什么用处
顾名思义,strtotime() 函数用于将日期字符串转换为 Unix 时间戳(str to time)。
来自 [strtotime() 的 PHP 手册文档] 2:
strtotime — 将任何英文文本日期时间描述解析为 Unix 时间戳
例如,假设您想获取日期 25 December 2013 的 Unix 时间戳,那么您可以像这样使用 strtotime():
echo strtotime("25 December 2013"), "\n"; // => 1387909800
strtotime() 还可以处理相对时间和日期格式。例如,考虑以下情况:
echo strtotime("+1 month"), "\n"; // => 1390980039
echo strtotime("last day of next month"), "\n"; // => 1391152839
这些是一些基本示例。 strtotime() 也可以处理非常复杂的日期格式。请参阅the documentation 了解更多信息。
什么时候应该使用时间戳
无论区域如何,Unix 时间戳的解释都是相同的,并且无论时区如何,都是从同一时间点计算的。如果您有一个在多个时区使用的 Web 应用程序,并且您需要日期/时间来反映各个用户的设置,请使用时间戳。
以strtotime()为例,多用于日期格式之间的转换。由于strtotime() 几乎可以解析任何日期字符串,因此它用于将日期字符串转换为时间戳。获得时间戳后,您可以使用date() 或类似函数随意格式化它。
strtotime() 的限制
在 32 位系统上,整数的最大值为 2,147,483,647。可以这种方式表示的最远时间是 2038 年 1 月 19 日星期二 03:14:07 UTC。这也称为Year 2038 problem。
在PHP manual中查看此说明:
时间戳的有效范围通常是从 1901 年 12 月 13 日星期五 20:45:54 UTC 到 2038 年 1 月 19 日星期二 03:14:07 UTC。 (这些日期对应于 32 位有符号整数的最小值和最大值。)此外,并非所有平台都支持负时间戳,因此您的日期范围可能限制为不早于 Unix 纪元。这意味着例如1970 年 1 月 1 日之前的日期不适用于 Windows、一些 Linux 发行版和一些其他操作系统。 PHP 5.1.0 和更新的版本克服了这个限制。
使用 DateTime 对象
如果您正在处理13 Dec 1901 到19 Jan 2038 范围之外的日期,请考虑使用PHP 的DateTime 对象,它可以处理更广泛的日期范围。 DateTime 在任一方向上都可以代表大约 2930 亿年。
DateTime 类在 PHP 版本 >= 5.2.0 上可用。如果您运行的 PHP 版本高于 >= 5.2.0,那么在处理日期和时间时应该使用 DateTime。这是最好的方法。如果您使用的是旧 PHP 版本,请已经升级。 5.3.0 之前的任何东西都是古老的。
这里有一些关于 DateTime 的好文章:
还有一本书: