4

这是我的PHP代码:

echo '<br />1. '.$w_time_no;
echo '<br />2. '.strtotime($w_time_no);
echo '<br />3. '.date('G:i', strtotime($w_time_no));

这就是我得到的:

1. 0000-00-00 22:00:00
2.
3. 2:00

为什么 strtotime() 自己什么也不输出?服务器设置有问题吗?服务器:Apache/2.2.11 (Win32),PHP 5.2.10,MySQL 客户端版本:5.0.51a。

4

3 回答 3

11

strtotime不“输出”任何东西,顺便说一句:它false在出错的情况下返回;见手册

返回值

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

什么都不输出的是echo:false被认为是一个空字符串,没有任何输出。

strtotime 的文档还给出了日期的有效范围:

注意:时间戳的有效范围通常是从 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 和更新的版本克服了这个限制。

'0000-00-00'超出此范围,因此不被视为有效日期;因此false返回值。


作为旁注,要真正了解变量内部的内容,您可以使用var_dump.
作为一个 bnus,与Xdebug一起使用,它将为您提供格式良好的输出;-)

于 2009-08-03T21:23:44.153 回答
7

0000-00-00 不是有效日期。

date() 给出一个输出,因为它将输入时间解释为 0 并补偿您的服务器的时区,我假设。我敢打赌那date('Y-m-d H:i', strtotime(...))会给 1970-01-01 2:00

于 2009-08-03T21:16:34.043 回答
-2

你误strtotime()认为time().

strtotime从字面上看是字符串到时间,它需要一个字符串来转换.....到时间。

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

所以它无法验证那个时间字符串。

于 2009-08-03T21:23:09.240 回答