字符串是否与strtotime()一起使用有效?

zmo*_*mol 5 php datetime strtotime

PHP strtotime()假定给定的输入是表示有效时间的字符串.在使用之前strtotime(),如何验证要提供给它的字符串是否为有效格式之一?

Bol*_*ock 10

strtotime()如果它无法理解您的日期格式,则返回false,以便您可以检查其返回值.该功能没有任何副作用,因此试图调用它不会有任何伤害.

// $format = ...

if (($timestamp = strtotime($format)) !== false) {
    // Obtained a valid $timestamp; $format is valid
} else {
    // $format is invalid
}
Run Code Online (Sandbox Code Playgroud)

但是,请注意,它strtotime()仅支持与服务器体系结构相同的Unix时间戳范围.这意味着它将在某些日期范围内错误地返回false.从手册:

注意:

时间戳的有效范围通常是从星期五,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和更新的版本克服了这个限制.

对于64位版本的PHP,时间戳的有效范围实际上是无限的,因为64位可以代表任何方向上大约2930亿年.

由于服务器体系结构可能会有所不同,根据您的使用情况,您可能会受限于32位Unix时间戳,即使64位时间戳覆盖了几乎无限的时间段.

  • 是的,这很重要.我承认,并非总是如此; 如果您可以100%确定日期将在1901-2038范围内,那么您是安全的.问题是,你永远无法确定你的代码将在几年后被重新使用.Y2K问题已经非常明确,我认为程序员应该意识到这些局限性. (2认同)