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

发布于 2024-10-17 02:38:10 字数 115 浏览 2 评论 0原文

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

PHP has strtotime() which assumes the input given is a string that represents a valid time. Before using strtotime(), how can I verify that the string about to be given to it is in one of its valid formats?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

爱冒险 2024-10-24 02:38:10

如果 strtotime() 无法理解您的日期格式,则返回 false,因此您可以检查其返回值。该函数没有任何副作用,因此尝试调用它不会有什么坏处。

// $format = ...

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

但请注意,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 位时间戳几乎涵盖了无限的时间段。

strtotime() returns false if it can't understand your date format, so you can check its return value. The function doesn't have any side effects, so trying to call it won't hurt.

// $format = ...

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

Be warned, however, that strtotime() only supports the same range of Unix timestamps as the server architecture does. This means it will incorrectly return false for certain date ranges. From the manual:

Note:

The valid range of a timestamp is typically from Fri, 13 Dec 1901 20:45:54 UTC to Tue, 19 Jan 2038 03:14:07 UTC. (These are the dates that correspond to the minimum and maximum values for a 32-bit signed integer.) Additionally, not all platforms support negative timestamps, therefore your date range may be limited to no earlier than the Unix epoch. This means that e.g. dates prior to Jan 1, 1970 will not work on Windows, some Linux distributions, and a few other operating systems. PHP 5.1.0 and newer versions overcome this limitation though.

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.

Because server architectures can vary, you may be limited to 32-bit Unix timestamps depending on your use case, even though 64-bit timestamps cover a practically infinite period of time.

寂寞花火° 2024-10-24 02:38:10

实际上,在执行该函数之前您无法检查这一点,但您可以查看官方 php.net 页面。你唯一能做的就是检查你的函数是否返回“false”。

这是一个链接strtotime()

有很多关于 strtotime() 功能的示例。

Actually you can't check that before executing the function, but you could take a look at the official php.net page. The only thing you can do is checking whether your function returns "false".

Here's a link strtotime().

There are a lot of examples of what you can do with strtotime().

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文